原型链继承
利用原型让一个引用类型继承另一个引用类型的属性和方法
缺点:
1.通过原型来实现继承是,原型会被变成另一个类型的实例,原型链属性变成了现在的原型属性,该原型的引用类型属性会被共享
2.在创建子类型的实例时,没有办法在不影响所有对象实例的情况下给超类型的构造函数中传递参数
借用构造函数继承
在子类型的构造函数中调用超类型构造函数
优点:
1.可以向超类型传递参数
2.解决了原型中包含引用类型值被所有实例共享的问题
缺点:
1.方法都在构造函数中定义,超类型原型中定义的方法对于子类型而言时不可见的
组合继承(原型链继承+借用构造函数继承)
组合继承是将原型链继承和构造函数继承结合到一起,发挥二者之长的一种继承模式
优点:
1.可以向超类型传递参数
2.每个实例都有自己的属性
3.实现了函数复用
缺点:
1.会调用两次超类型构造函数:一次是在创建子类型原型的时候,另一次是在子类型构造函数内部
原型式继承
借助原型可以基于已有的对象创建新对象,不用创建自定义类型,在没有创建构造函数,仅让一个对象与另一个对象保持相似的情况下,可以使用原型式继承
缺点:
同原型链一样,引用类型值的属性会被所有实例共享
寄生式继承
即创建一个仅用于封装继承过程的函数,该函数在内部可以增强对象,最后返回对象
缺点:
1.使用寄生式继承为对象添加函数,做不到函数复用效率低下
2.原型链一样,引用类型值会被所有实例共享
寄生组合式继承
即通过借用构造函数来继承属性,通过原型链的混成形式来继承方法
思路:
第一步:创建超类型原型的一个副本
第二步:为创建的副本添加constructor属性
第三步:将新创建的对象赋值给子类型原型
优点:只调用一次超类型构造函数,效率高,避免在suberType.prototype上创建不必要属性,原型链还能保持不变
寄生式组合继承式最理性的继承方式