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

2021-10-25 11:01:26 字數 839 閱讀 7518

組合繼承綜合了原型鏈和盜用建構函式,解決了原型內引用值共享的問題,以及子類在例項化時不能給父類建構函式傳參的問題。

缺點:呼叫了兩次父類建構函式影響效率,而且子類的原型物件上也擁有了不必要也用不上的屬性,即父類建構函式的例項屬性。這樣的話子類的例項物件如果刪除某個屬性,這個屬性仍然可以訪問到,因為它可能存在於子類的原型物件上

解決:不通過呼叫父類建構函式給子類原型物件賦值的方式建立繼承關係,而是通過寄生式繼承繼承父類原型,然後將返回的例項物件賦值給子類原型

object.create()內部

object.create()函式內部宣告乙個空建構函式,其原型物件指向a原型物件的記憶體位址,可以理解為a原型物件的副本,它們兩指向同乙個記憶體位址。然後返回這個建構函式的例項物件(呼叫建構函式),並且賦值給b的原型物件,這樣b的原型裡面不會有其他屬性(不會像組合繼承一樣因為呼叫a建構函式而獲得了a的例項屬性),卻可以繼承a原型物件的屬性和方法,因為此時b原型物件的_proto_指向a原型物件,並且呼叫乙個空函式占用的記憶體效率可以忽略不計。簡單來說,let a = object.create(b):返回乙個新物件a,並且該物件繼承自b物件

寄生式組合繼承

function box f 這樣直接將原型指向乙個物件,會將原有的constructor覆蓋 box.prototype 因此這裡我們使用定義屬性,重新穿件這個constructor的指向 object.defineproperty box.prototype,constructor functi...

寄生組合繼承

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

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

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