函数和对象

函数和对象

一、初始面向对象

面向对象中的类和对象:

  • 类:JS中的类本质还是一个函数 是抽象不具体function Person(){ // 是一个类的话字母会大写}
    new Person(); // 此时Persion是一个类
    Person(); // 此时Person就是一个函数
  • 对象:
    var obj = {name:“wc”}; obj就是一个对象,在JS中一个{}就是一个对象。
    如果在JAVA中,对象都是new出来的,先有class,后有对象。

面向对象特征:

  • 抽象:把一个具体问题抽象化。
  • 封装:把属性和方法封装到类中,在JS中说对象。
    var obj = {
    name:“wc”,
    age:100,
    say:function(){
    log(“say…”);
    }
    }
  • 继承:一个类可类可以继承另一个类,在JS是通过函数表达式。
  • 多态

JS默认提供了很多的类

包含有:

  • Number
  • String
  • Boolean
  • Object
  • Date
  • Math 单体内置类,不需要new(常驻内存不需要new)
  • Array

二、JS中一切数据都是对象

这里的数据不是指数据类型,而是一切数据,不仅包含了基本数据类型、引用数据类型、还包含了html元素,以及console和window。因为他们都是数据,所以都是对象

到底什么是对象呢?以及对象可以进行哪些操作呢?

  • 所谓的对象原来是属性的无序集合。
  • 我们可以对其进行:增删查改
  • 增: 给添加添加新的属性

var obj = { name:"wangcai" } console.log(obj.name); // 打印出obj中name属性 访问 obj.name = "xiaoqiang"; // 修改属性 console.log(obj.name); // 同名属性后面的把前面的覆盖掉 obj.age = 1100; // 新增属性 obj["address"] = "北京"; // 新增属性 console.log(obj)

  • 删:

var obj = { name:"wangcai", age:100 } console.log(obj) // delete 是一个运算符 是单目运算符 表示删除一个属性 delete obj.age; console.log(obj)

  • 查:
    如何访问对象里面的属性 键可以使用引号包起来,也可以不使用引号包起来
  • 1)打点调用
  • 2)通过[]来调用
    仅作了解 通常都是打点调用
    var obj = { name:"wangcai", // name叫属性名 “wangbai"叫属性值 123:456, // 123是属性名(键),456是属性值(值) "1+1":2, // "1+1"是属性名 2是属性值 "a":"hello", "b":null, "c":function () { console.log("c..") }, "d":["1","2","3"], "e":{ x:"xxx" } } console.log(obj.name) console.log(obj[123]); // 456 console.log(obj.a); // hello console.log(obj["1+1"]); // 2 // 如果我们的键是一个变量 我们需要通过变量去访问 必须使用[] var k = "name"; console.log(obj[k]); // wangcai
  • 改:
    通过添加已有属性,就会改变原有的值。方法和增一样。

三、对象中的属性有4大特征

    1. configurable 表示是否可以被删除 tru表示可以删除
  • 2)writable 表示是否可以修改 tru示可以修改
  • 3)enumerable 是否可以枚举 是否以出 true表示可以输出
  • 4)value 属性值 默认是und

var obj = { name:"wangcai" console.log(Object.getOwnPropertyDescriptor(obj, "name"));// 通过Object.getOwnPropertyDescriptor 获取属性的特征。结果如下:
configurable: true
writable: true
enumerable: true
value: "wangc

问:数组中有一个属性叫length 它为什么不能输出
var arr = ["a"] // enumerablefalse console.log(ObjecgetOwnPropertyDescriptor(arr"length"));

  • 给一个对象添加一个属性时,也可以设置上面的4个特征
    // Object.defineProperty()
    var obj = {}; Object.defineProperty(obj,"name",{ configurable:false, writable:false, enumerable:true, value:"wangcai" }) console.log(obj)//先查看obj里面属性的值 delete obj.name;//看是否会删除name属性 console.log(obj);//验证是否删除了 obj.name = "xxx";//看是否会修改name的值 console.log(obj);//验证是否修改了 for (const objKey in obj) { console.log(obj[objKey]); }//for in:操作对象中的属性之遍历对象

四、属性的分类(私有属性 公有属性)

对象上的属性是分成两类的

  • 私有属性
  • 公有属性
    var obj = { name:"wangcai", age:100 }
    // 通过一个api可以查看一个属性是否是私属性
    // 叫 hasOwnProperty();
    console.log(obj.hasOwnPropert("name"));// true 查看name是否是obj私有属性
    console.log(obj.hasOwnProperty("age"); // true
  • 公有属性也叫:原型属性

console.log(obj) console.dir(obj.hasOwnPropert("toString")); // false 查看toStrin是否是obj的私有属性
console.log(obj.hasOwnPropert("__proto__")) // false 查__proto__是否是obj的私有属性
console.log(obj.__proto__hasOwnProperty("toString")); //true // 查看toString是否是obj__proto__这个对象的私有属性

  • 对于obj来说:name和age是它的私有性 toString是它的公有属性
  • 对于obj.__proto__来说:toString是的私有属性

也就是说一个属性是私有属性还是公有性,还需要看它针对是谁。

var arr = ["a","b"]; console.dir(arr); console.log(arr.hasOwnPropert("length")); // true console.log(arr.hasOwnPropert("push")); // false console.log(arr.hasOwnPropert("__proto__")); // false console.log(arr.__proto__hasOwnProperty("push")); // true // delete只能删除私有属性 不能删除公属性 delete arr[0]; console.log(arr); delete arr.push; console.dir(arr)

如果一个私有属性和公有属性重名了 把公有属性覆盖掉

var a1 = ["a"]; console.dir(a1) a1.push("b") console.dir(a1) a1.push = function () { console.log("自己的push") } a1.push("c");

五、函数的四种角色

角色一:一个普通的函数
function f() { console.log("f...") } // f(); 作用1:让函数体执行 作用2得到返回值 f();
角色2:在对象中可以当成一个方法
let obj = { say:function () { // 方法 console.log("say...") }, sleep:function () { // 方法 console.log("sleep...") } } obj.say() obj.sleep()
角色3:类 构造器
function NBAPlayer() { } var nbaPlayer1 = new NBAPlayer(); var nbaPlayer2 = new NBAPlayer(); var nbaPlayer3 = new NBAPlayer(); console.log(nbaPlayer1); console.log(nbaPlayer2); console.log(nbaPlayer3);
角色4:也可以当作是一个对象
function F() { } F.name1 = "wangcai"; F.age = 100 console.log(F.name1) console.log(F.age)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值