js學習記錄(3) 寄生組合式繼承

2021-10-03 21:25:12 字數 1347 閱讀 5855

寄生組合式繼承本質上就是使用寄生式繼承來繼承超型別的原型,然後再將結果指定給子型別的原型。

下面結合**分析一下:

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...