对象
所有客观存在的事物和抽象的规则计划或者事件等。
- 属性的无序集合体(代码的角度)
一、 一切皆对象
数组 函数 字符串 数值 布尔值…
二、属性
- 属性: 可以用值来描述的属性
- 方法: 用函数来描述的属性
三、类
对于具有相同或者相似属性的对象的抽象描述。
类的具体化(实例化)就是对象。
在js当中通过构造函数来实现类的。
在js当中得到对象就可以通过实例化构造函数。
四、语法
-
得到对象的方式
- JSON 方式 javascript原生对象描述法,就是在js当中清楚的展示一个对象内部结构的语法。属性:值 这种形式可以直接被替换为一个变量,变量名就是属性名 变量值就是属性值
- 实例化构造函数的形式。
- 自己定义构造函数
- 实例化
var arr=new Array(); var fun=new Function();
- 实例化顶层构造函数 Object
-
对象的添加
- 在使用之前就已经添加好的 在JSON或者在构造函数当中
- 在使用可以添加
- 对象.属性=值
- 对象[变量名]=值
无论通过哪种方式添加,最终的效果完全一样的,也就是说在使用的时候是没有任何区别的。
- 对象属性的访问
- 对象.属性
- 对象.属性();
- 对象[变量名]
- 对象[变量名]();
- 对象属性的遍历
- for(var i in obj){}
五、继承
在js当中,每一个对象都可以通过一些方式拥有另一个对象的所有的属性和方法,这种形式我们称为继承,在这里我们所说的另一个对象就被当前这个对象的原型。
- 实现继承 两种方法
- 将当前对象的构造函数的prototype属性赋值为原型对象就可以实现继承。
- 对象冒充 call/apply、
function Human(name) { this.arms=2; this.name=name; } function Student(n){ Human.call(this.n); } var someone=new Student("lisi"); //{arms:2,name:"lisi"}
六、this
-
在构造函数中 构造函数的prototype属性 也就是将要实例化出来的对象的原型
-
在普通函数中 window对象
-
如果是某一个对象的方法,那么无论是在哪里定义的,方法当中的this指的都是当前调用这个方法的对象。
-
call/apply 改变当前函数在调用的时候this所代表的对象。
在原型里存放方法的时候.call在传参的时候直接传参 apply则需要以数组的形式传参