JavaScript - 继承
继承
原型链
让一个引用类型继承另一个引用类型的属性和方法
由
Prototype
不断把实例和原型对象联系起来的结构过程
- 原型对象通过
constructor
属性指向构造函数 - 实例通过
Prototype
属性指向原型对象
- 原型对象通过
缺陷
- 在赋值时,赋给变量的是它在内存中的地址
- 实例没办法向构造函数传参
继承方式
借用构造函数继承
- 子类型的构造函数中借用父类型的构造函数(为了解决引用类型)
1 |
|
组合继承
- 属性独立,方法复用 最常用!
- 原型链负责原型对象上的方法,call借用构造函数负责让子类型拥有各自的属性
- 缺点:子类型会调用两次父类型的构造函数
1 | function A(name) { |
原型式继承
- Object.create(),对对象的浅复制,父子对象的指针指向同一个引用类型
1 | var A = { |
寄生式继承(工厂模式)
1 | function createA(name) { |
寄生组合式继承
- 换一种方式实现
B.prototype = new A()
- 避免两次调用父类的构造函数
1 | // 默认A是父类型,B是子类型 |
ES6 extends
- 属性放在构造函数里,方法绑定在原型对象上