一.構(gòu)造繼承
1.基本思想
通過使用apply,call方法可以在新創(chuàng)建的對象上執(zhí)行構(gòu)造函數(shù),用父類的構(gòu)造函數(shù)實現(xiàn)子類的實例
2.具體實現(xiàn)
function sub(){
????Super.call(this); // 調(diào)用父類
}
3.優(yōu)缺點
——優(yōu)點: 簡單明了逊抡,直接繼承構(gòu)造函數(shù)的屬性和方法
——缺點: 無法繼承原型鏈上的屬性和方法
二.原型鏈繼承
1.基本思想
利用原型鏈來實現(xiàn)繼承
2.具體實現(xiàn)
function Sub(){}
Sub.prototype = new Super()
Sub.prototype.constructor = Sub
3.優(yōu)缺點
——優(yōu)點: 簡單明了宇立,實例是子類的實例毛萌,也是父類的實例
——缺點: 所有子類的實例的原型都共享同一個超類實例的屬性和方法
三.組合繼承
1.基本思想
結(jié)合構(gòu)造函數(shù)和原型鏈來實現(xiàn)繼承
2.具體實現(xiàn)
function Sub(){
? ? ? ? Super.call(this)
}
Sub.prototype = new Super()
Sub.prototype.constructor = Sub
3.優(yōu)缺點
——優(yōu)點: 解決了構(gòu)造函數(shù)和原型鏈繼承的問題
——缺點: 事件上子類上會擁有超類的兩份屬性扣蜻,只是子類的屬性覆蓋了超類的屬性
四.原型式繼承
1.基本思想
通過Object.create(obj)實現(xiàn)
2.具體實現(xiàn)
if(?typeof Object.prototype.create != 'function'? ){
????????Object.prototype.create = function(obj){
? ? ? ? ? ? ? ? function F(){}
? ? ? ? ? ? ? ? F.prototype = obj;
? ? ? ? ? ? ? ? return new F()
}}
3.優(yōu)缺點
——優(yōu)點: 直接通過對象生成一個繼承該對象的對象
——缺點: 沒有類的概念
五.寄生式繼承
1.基本思想
創(chuàng)建一個僅僅用于封裝繼承過程的函數(shù),然后在內(nèi)部以某種方式增強對象县貌,最后返回對象
2.具體實現(xiàn)
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.優(yōu)缺點
——優(yōu)點: 原型式繼承的一種拓展
——缺點: 還是沒有類的概念
六.寄生組合式繼承
1.基本思想
集合寄生式繼承和組合式繼承缸夹,完美實現(xiàn)不帶兩份超類屬性的繼承方式
2.具體實現(xiàn)
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.優(yōu)缺點
——優(yōu)點: 完美實現(xiàn)不帶兩份超類屬性的繼承方式
——缺點: 太過繁瑣
原文鏈接:https://blog.csdn.net/caijixin/article/details/78295676