例項 寄生組合式繼承

2021-10-10 09:20:06 字數 1617 閱讀 6090

寄生組合式繼承

寄生組合式繼承的基本思想是什麼?有哪些優缺點:

寄生組合式繼承的基本思想是為了解決組合繼承的缺點,組合繼承呼叫了兩次父類建構函式,生成了兩個例項屬性,只不過例項上的覆蓋了原型上的屬性。用了寄生式繼承的方法,將子類原型指向父類原型,一般是object.create() 與 object.setprototype()

缺點:感覺還是父類原型中的引用型別值會被所有下面的例項共享,乙個改變,其他都變了。

所謂寄生組合式繼承,即通過借用建構函式來繼承屬性,通過原型鏈的混成形式來繼承方法,基本思路:

不必為了指定子型別的原型而呼叫超型別的建構函式,我們需要的僅僅是超型別原型的乙個副本,本質上就是使用寄生式繼承來繼承超型別的原型,然後再將結果指定給子型別的原型。寄生組合式繼承的基本模式如下:

function

inheritprototype

(subtype,supertype)

實現的方式分為三步:

第一步:建立超型別原型的乙個副本

第二步:為建立的副本新增 constuctor 屬性

第三步:將新建立的物件賦值給子型別的原型

至此,我們可以通過呼叫 inheritprototype 來替換為子型別原型賦值的語句:

例項分析(完整步驟):

function

inheritprototype

(subtype,supertype)

function

people

(name)

people.prototype.

say=

function()

function

students

(name,age)

students.prototype =

newpeople()

;inheritprototype

(students,people)

;students.prototype.

write

=function()

var s1 =

newstudents

("張三",20

);s1.colors.

push

("red");

console.

log(s1)

;s1.

say();

s1.write()

;var s2 =

newstudents

("李四",25

);s2.colors.

push

("blue");

console.

log(s2)

;s2.

say();

s2.write()

;

控制台輸出:

優點:只呼叫了一次超型別建構函式,效率高。避免在 subertype.prototype 上面建立不必要的、多餘的屬性,與此同時,原型鏈還能保持不變。

優點:只呼叫了一次超型別建構函式,效率高。避免在 subertype.prototype 上面建立不必要的、多餘的屬性,與此同時,原型鏈還能保持不變。

因此寄生組合繼承是引用型別最理想的繼承方式。

詳談 寄生組合式繼承

所謂寄生組合式繼承,即通過借用建構函式來繼承屬性,通過原型鏈的混成形式來繼承方法 不必為了指定子型別的原型而呼叫超型別的建構函式,我們需要的僅是超型別原型的乙個副本,本質上就是使用寄生式繼承來繼承超型別的原型,然後再將結果指定給子型別的原型。寄生組合式繼承的基本模式如下所示 function inh...

JS繼承 寄生組合式繼承

1,原型式繼承 以乙個已有的物件為原型,創造乙個新的物件 function inheritobject o f.prototype o return new f 2,寄生式繼承 在原型式繼承的基礎上,為新的物件新增新的方法 function createobj proto return o 3,寄生...

組合繼承與寄生組合式繼承

組合繼承 將原型鏈和借用建構函式的技術組合到一塊。使用原型鏈實現對原型屬性和方法的繼承,而通過借用建構函式來實現對例項屬性的繼承。超類的屬性被繼承了兩次,一次是在子類的建構函式中,使得子類例項擁有各自的屬性 一次是在子類的原型中,使得子類擁有相同的屬性。1 function supertype na...