寄生式組合繼承

2021-09-24 22:16:50 字數 778 閱讀 8033

function box(_f)

// 這樣直接將原型指向乙個物件,會將原有的constructor覆蓋

box.prototype=

};// 因此這裡我們使用定義屬性,重新穿件這個constructor的指向

object.defineproperty(box.prototype,"constructor",);

function extend(subclass,supclass)

f.prototype=supclass.prototype;

subclass.prototype=new f();

object.defineproperty(subclass.prototype,"constructor",);

subclass.prototype.superclass=supclass.prototype;

if(supclass.prototype.constructor===object) );}}

function ball(_f)

// es6中 extends box

extend(ball,box);

// ball.prototype=

// 給原型上新增新的屬性

object.assign(ball.prototype,,

// 覆蓋父類的方法

b:function()

})var c=new ball(5);

console.log(c);

c.b();

組合繼承和寄生式組合繼承

組合繼承綜合了原型鏈和盜用建構函式,解決了原型內引用值共享的問題,以及子類在例項化時不能給父類建構函式傳參的問題。缺點 呼叫了兩次父類建構函式影響效率,而且子類的原型物件上也擁有了不必要也用不上的屬性,即父類建構函式的例項屬性。這樣的話子類的例項物件如果刪除某個屬性,這個屬性仍然可以訪問到,因為它可...

物件導向繼承 寄生式組合繼承

2.子類建構函式 function ministudent name,age,混合繼承 物件冒充 建構函式中屬性和方法 原型鏈繼承 繼承原型物件中屬性和方法 4.原型鏈繼承 object.create 以原型為基礎建立物件 ministudent.prototype object.create st...

寄生組合繼承

核心 通過寄生方式,砍掉父類的例項屬性,這樣,在呼叫兩次父類的構造的時候,就不會初始化兩次例項方法 屬性,避免的組合繼承的缺點 既然要實現繼承定義乙個父類 定義乙個動物類 function animal name super.prototype animal.prototype 例項作為子類的原型 ...