原型、原型链、继承、类
1、原型与原型链
1)、函数上面有原型对象
2)、对象都有原型链
3)、原型链的继承关系
4)、new 操作符来作用这个函数时,称为构造函数
5)、从当前实例属性去查找,如果找到了就返回,如果没有则顺着原型链一层一层地向上找,直到找到null为止
6)、hasOwnProperty: 找到自身的私有属性
7)、自有属性和原型属性
2、继承
1) 原型链继承:
- 核心:SubType.prototype = new SuperType()
- 缺点:引用类型会被篡改
2)构造函数继承:
- 核心:SuperType.call(this),
- 缺点:1)只能继承父类的实例属性/方法,不能继承原型属性/方法;2)无法实现复用,每个子类都有父类实例函数副本,影响性能
3)组合继承:原型链实现原型属性和方法的继承,构造函数实现实例属性的继承
- 核心:1)SubType.prototype = new SuperType();SubType.constructor = SubType;2)SubType函数中调用 SuperType.call(this)
- 缺点: 第一次调用SuperType(),给SubType.protoype写入属性;第二次调用SubperType给instance 写入属性
4)原型试继承:利用一个空对象作为中介,将某个对象直接赋值给空对象的构造函数的原型
- 核心:function object(obj){function F() {}; F.prototype = obj; return new F()}
- 缺点:1)原型链继承多个实例的引用类型属性指向相同,存在篡改的可能;无法传递参数
5)寄生式继承
- 核心: 在原型式继承的基础上,增强对象,返回构造函数,主要是增强函数
- 缺点:同原型式继承
6)寄生组合式继承
- 核心: function inheritPrototype(subType, superType){var prototype = Object.create(superType.prototype);prototype.constructor = subType;subType.prototype = prototype}
7)混入方式继承多个对象
8) es6类的extends关键字继承 --- 寄生组合式继承
3、类
1) 定义类:
- class关键字,声明一个类
- 提升: 函数声明会提升,类声明不会,所以如果你再类声明前去访问他,则会抛出RefeenceError错误
- 类的表达式
2)类体和方法定义
- 严格模式
- 构造函数 contructor, 可以使用super关键字来调用父类的构造函数
- 原型方法
- 静态方法:static 关键字
- 用原型和静态方法绑定this的值
- 实例属性,必须定义在类的方法里面,静态或原型的数据必须定义在类定义的外面
- 公有字段
- 私有字段:例如: #height = 0
3)使用extends扩展子类,继承
4)Species
5)使用super调用超类
6)Mix-ins/混入
4、参考