1.1 继承的概念
子类继承父类派生的属性和方法,可以直接使用。子类还可以添加自己新的属性和方法。
作用:提高了代码的复用性
1.2 原型继承
通过原型对象 prototype 实现继承。
如何实现继承——用子类的原型对象指向父类的实例对象。
语法为:
子类.prototype = new 父类();
为什么子类对象可以访问所有的属性和方法?
子类实例对象可以访问 new 出来的堆空间的属性。
子类实例对象通过 __proto__ 指向子类的原型对象,所以可以访问子类原型对象上的方法或属性。
子类的原型对象指向其父类的实例化对象,所以可以访问父类的属性。
父类实例化对象的 __proto__ 指向其父类的原型对象,所以可以访问父类原型对象上的方法或属性。
向上找->先在自身找,找不到往上找。
原型继承的缺陷
- 必须实现继承关系,才能添加原型对象上的属性和方法
- 一旦实现原型继承关系,子类原型对象的值就不能改变
原型继承无法初始化由父类派生给子类的属性
1.3 apply 和 call 继承
也称为借用构造函数'继承'。
好处:可以实现由父类派生给子类的属性,在构造时可以初始化。
缺点:无法继承原型对象上的属性和方法
1.4 混合继承
用原型继承,继承原型对象上的属性和方法。
用借用方法继承,继承父类派生给子类的属性。
1.5 ES6 继承
通过 extends 关键字继承。
class 子类 extends 父类 {
constructor(...args) {
super(...args); // super 是代表父类构造函数的关键字,等价于调用父类构造函数
// 必须写在构造函数的第一行
}
}

