原型链继承
利用原型链让一个构造函数的原型指向另一个构造函数的实例,从而实现继承。但是原型链继承存在一些问题,比如引用类型值的共享和在创建子类型的实例时无法向超类型传递参数等。
1 | function Parent() { |
构造函数继承
在子类型构造函数内调用超类型构造函数,使用 call 或 apply 方法,从而实现继承。但是这种方式无法继承超类型的原型上的属性和方法。
1 | function Parent() { |
组合继承
将原型链继承和构造函数继承结合起来,既可以继承超类型的原型属性和方法,又可以在子类型构造函数中传递参数。
1 | function Parent(name) { |
原型式继承
使用一个临时构造函数创建一个对象,这个对象的原型指向传入的对象,从而实现继承。
1 | function object(o) { |
寄生式继承
在原型式继承的基础上,对新创建的对象添加额外的属性或方法,然后返回这个新对象。
1 | function createAnother(original) { |
寄生组合式继承
通过借用构造函数来继承属性,通过原型链的混合形式来继承方法,是最常用的继承方式之一,也是组合继承的改进版本,避免了组合继承的缺点。
1 | function inheritPrototype(child, parent) { |