一.构造继承
1.基本思想
通过使用apply,call方法可以在新创建的对象上执行构造函数,用父类的构造函数实现子类的实例
2.具体实现
function sub(){
Super.call(this); // 调用父类
}
3.优缺点
——优点: 简单明了,直接继承构造函数的属性和方法
——缺点: 无法继承原型链上的属性和方法
二.原型链继承
1.基本思想
利用原型链来实现继承
2.具体实现
function Sub(){}
Sub.prototype = new Super()
Sub.prototype.constructor = Sub
3.优缺点
——优点: 简单明了,实例是子类的实例,也是父类的实例
——缺点: 所有子类的实例的原型都共享同一个超类实例的属性和方法
三.组合继承
1.基本思想
结合构造函数和原型链来实现继承
2.具体实现
function Sub(){
Super.call(this)
}
Sub.prototype = new Super()
Sub.prototype.constructor = Sub
3.优缺点
——优点: 解决了构造函数和原型链继承的问题
——缺点: 事件上子类上会拥有超类的两份属性,只是子类的属性覆盖了超类的属性
四.原型式继承
1.基本思想
通过Object.create(obj)实现
2.具体实现
if( typeof Object.prototype.create != 'function' ){
Object.prototype.create = function(obj){
function F(){}
F.prototype = obj;
return new F()
}}
3.优缺点
——优点: 直接通过对象生成一个继承该对象的对象
——缺点: 没有类的概念
五.寄生式继承
1.基本思想
创建一个仅仅用于封装继承过程的函数,然后在内部以某种方式增强对象,最后返回对象
2.具体实现
if( typeof Object.prototype.create != 'function' ){
Object.prototype.create = function(obj){
function F(){}
F.prototype = obj;
return new F()
}}
function createSubOobj(superInstance){
var clone = Object.create(superInstance)
return clone
}
3.优缺点
——优点: 原型式继承的一种拓展
——缺点: 还是没有类的概念
六.寄生组合式继承
1.基本思想
集合寄生式继承和组合式继承,完美实现不带两份超类属性的继承方式
2.具体实现
function inheritPrototype(Super,Sub){
var superProtoClone = Object.create(Super.prototype)
superProtoClone.constructor = Sub
Sub.prototype = Super
}
function Sub(){
Super.call(this)
}
inheritPrototype(Super,Sub)
3.优缺点
——优点: 完美实现不带两份超类属性的继承方式
——缺点: 太过繁琐
原文链接:https://blog.csdn.net/caijixin/article/details/78295676