原型链继承
基本思想就是
缺点:
- 在原型中包含引用值得时候,引用值会在所有的实例间共享。
- 子类型在实例化时不能给父类性的构造函数传参。
原型搜索机制:当读取实例的某一个属性是,首先会在该实例上搜索这个属性,,如果没找到,则会继承搜索该实例的原型。在通过原型链实现继承之后,搜索就可以向上继承,搜索原型的原型,一直持续到原型链的末端。
构造函数继承
基本思想就是在子类型的构造函数中调用父类型的构造函数,借用call或者apply实现。
使用原型链继承原型上的属性和方法,通过构造函数继承实例属性。
构造函数继承可以解决原型链中的两个问题:
- 保证了原型链中引用类型值的独立,使其不再被所以实例共享
- 子类型在创建时可以向父类型传参
组合继承
组合基础就是将原型链继承和构造函数继承结合到一块,结合其优点,补足其缺点。
基本思想就是使用原型链实现对原型属性和方法的继承,通过借用构造函数来实现对实例属性的继承,这样我们即可以通过使用在原型上定义方法来实现函数复用,又能够保证每个实例都有自己的属性。
组合继承避免了原型链继承和构造函数继承的缺陷,同时又结合了两者的优点,所以组合继承是JavaScript中最常用的继承模式。