寄生組合式繼承本質上就是使用寄生式繼承來繼承超型別的原型,然後再將結果指定給子型別的原型。
下面結合**分析一下:
function
object
(o)f
.prototype=o;
return
newf()
;}function
inheritprototype
(subtype,supertype)
function
supertype
(name)
supertype.prototype.
sayname
=function()
function
subtype
(name,age)
inheritprototype
(subtype,supertype)
; supertype("super"); //呼叫supertype建構函式
var instance=
newsubtype
("niko",43
);instance.
sayname()
;
如果把注釋取消,刪除object函式和inheritprototype函式,就是組合式繼承的寫法,組合式繼承的不足就是呼叫了兩次supertype建構函式。
object函式是寄生式繼承的內容,這個函式建立了乙個臨時的建構函式,然後將傳入的物件作為這個建構函式的原型,最後返回這個臨時型別的乙個新例項。
寄生組合式繼承少掉的就是subtype.prototype=new supertype()
這次呼叫,這條語句是將subtype建構函式的prototype屬性指向supertype的例項,之後建立的subtype例項的原型就是supertype例項,所以subtype例項就可以使用supertype例項的屬性和supertype原型中的方法,不過由於使用了借用建構函式,subtype的例項中已經包含了supertype建構函式中的屬性,換句話說即使沒有這條語句,subtype也已經繼承了supertype的屬性,subtype需要的只是supertype原型中的方法,這裡是sayname方法。
實現方式是將supertype.prototype也就是supertype原型傳給object函式,就得到了乙個原型是supertype原型且沒有多餘屬性的例項,然後將subtype建構函式的prototype屬性指向它,那麼subtype的例項instance就可以沿著原型鏈訪問到supertype原型中的方法。
最後附上一張圖:
JS繼承 寄生組合式繼承
1,原型式繼承 以乙個已有的物件為原型,創造乙個新的物件 function inheritobject o f.prototype o return new f 2,寄生式繼承 在原型式繼承的基礎上,為新的物件新增新的方法 function createobj proto return o 3,寄生...
例項 寄生組合式繼承
寄生組合式繼承 寄生組合式繼承的基本思想是什麼?有哪些優缺點 寄生組合式繼承的基本思想是為了解決組合繼承的缺點,組合繼承呼叫了兩次父類建構函式,生成了兩個例項屬性,只不過例項上的覆蓋了原型上的屬性。用了寄生式繼承的方法,將子類原型指向父類原型,一般是object.create 與 object.se...
詳談 寄生組合式繼承
所謂寄生組合式繼承,即通過借用建構函式來繼承屬性,通過原型鏈的混成形式來繼承方法 不必為了指定子型別的原型而呼叫超型別的建構函式,我們需要的僅是超型別原型的乙個副本,本質上就是使用寄生式繼承來繼承超型別的原型,然後再將結果指定給子型別的原型。寄生組合式繼承的基本模式如下所示 function inh...