1.什么是对象?
多个数据的封装体
用来保存多个数据的容器
一个对象代表现实中的一个事物
2.为什么要用对象?
统一管理多个数据
3.如何访问对象内部数据?
( . )属性名:编码简单,有时不能用
[ ‘ 属性名 ’ ]:编码复杂,能通用
4.什么时候必须使用[ ‘ 属性名 ’ ]的方法?
属性名包含特殊字符: - 空格
属性名不确定
5.js中如何去生成对象?
(1)单例模式/字面量定义 var obj={name:"zhang"}
(2)var obj=new Object() 内置类
Obj.name="zhang"
js内置的类 string array object number boolean date function
(3)工厂模式
function create(){
var obj={}
Obj.name=
return obj;
}
(4)构造函数
function Person(){
this.name="li"
}
var zhang=new Person()
6.this的问题
任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window
所有函数内部都有一个变量this
它的值是调用函数的当前对象
7.原型对象
把相同的属性和方法写在构造函数的原型对象里。
构造函数的实例对象 new 出来的实例就全部可以访问。
原型对象存在的最大作用就是节省内存空间
8.原型prototype
每个函数 类天生自带一个prototype的属性,这个属性是个对象,它里面天生自带一个constructor的属性,属性值是当前函数/类本身;
每个实例对象 天生自带一个__proto__的属性,这个属性是对象,它指向当前实例对象的类的原型
9.原型链
每个对象天生有一个__proto__,指向类的原型。
prototype 和 __proto__
(1).prototype是类的或者函数的,__proto__是对象的。
(2).prototype是存储机制,程序员来实现。__proto__是查找机制(浏览器的)。
例子:zhangsan.name
zhangsan这个对象首先看name是私有的,是就直接使用,不是的就通过__proto__往他的类的prototype上查找,有就直接使用,没有就继续往上查找,直到查找到基类Object,没有就是undefined,有就直接使用,这种查找机制叫原型链。
10.类的继承
- 原型继承 将父类的实例对象赋值给子类的原型,私有的公有的都继承为公有的
- Call继承 call方法是函数/类天生自带的一个方法,将父类私有的继承为子类私有的
- 冒充对象继承 将父类私有的和公有的都继承为子类私有的,使用for in
- 混合继承 私有的继承为私有的 私有的和公有的再次继承为公有的
- 组合继承 私有继承为私有 公有继承为公有
私有继承私有 借助call 公有继承为公有 不能是原型赋值给原型。因为原型是对象,是复合数据类型,是地址赋值给了前者,导致二者指向同一个原型,得克隆。
Js的克隆如何实现 var obj2 = object.create(obj1)
6.中间类继承 (伪数组)