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

2022-05-23 11:30:16 字數 1631 閱讀 4643

組合繼承

將原型鏈和借用建構函式的技術組合到一塊。

使用原型鏈實現對原型屬性和方法的繼承,而通過借用建構函式來實現對例項屬性的繼承。

超類的屬性被繼承了兩次,一次是在子類的建構函式中,使得子類例項擁有各自的屬性;一次是在子類的原型中,使得子類擁有相同的屬性。

1

function

supertype(name)

5 supertype.prototype.sayname = function

();8

9function

subtype(name,age)

14//

繼承屬性和方法

15 subtype.prototype = new supertype();//

原型鏈繼承

16 subtype.prototype.sayage = function

();19

20var instance1 = new subtype("nicholas",29);

21 instance1.colors.push("black");

22 alert(instance1.colors);//

red,blue,green,black

23instance1.sayname();

24instance1.sayage();

2526

var instance2 = new subtype("greg",27);

27 alert(instance2.colors);//

red,blue,green

28 instance2.sayname();//

greg

29 instance2.sayage();//

27

寄生組合式繼承

通過借用建構函式來繼承屬性,通過原型鏈的混成形式來繼承方法。

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

1

function

object(o)

3 f.prototype =o;

4return

newf();5}

67function

inheritprototype(subtype,supertype)

1516

function

supertype(name)

20 supertype.prototype.sayname = function

();23

24function

subtype(name,age)

28inheritprototype(subtype,supertype);

29 subtype.prototype.sayage() = function

()

只呼叫一次supertype建構函式,避免了在subtype prototype上面建立不必要的多餘的屬性。與此同時,原型鏈還能保持不變。

JS繼承 寄生組合式繼承

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

例項 寄生組合式繼承

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

詳談 寄生組合式繼承

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