《javascript高級程序設(shè)計(jì)》對象創(chuàng)建與繼承 總結(jié)筆記

begin: 20170702
version: 20170724

1. 創(chuàng)建對象

2. 繼承

1)原型鏈

將超類型實(shí)例直接作為子類型的原型對象

  • 優(yōu)點(diǎn)
    子類型實(shí)例可以在原型鏈中找到所有超類型的屬性和方法。
  • 缺陷
    • 超類型包含引用類型值屬性時(shí),會出現(xiàn)問題
    • 子類型實(shí)例無法獨(dú)立向超類型構(gòu)造函數(shù)傳遞參數(shù)

2)借用構(gòu)造函數(shù)

在子類型構(gòu)造函數(shù)內(nèi)部,將this(調(diào)用子類型構(gòu)造函數(shù)時(shí)它指代子類型實(shí)例)作為環(huán)境對象用call方法調(diào)用超類型構(gòu)造函數(shù)。

  • 優(yōu)點(diǎn)
    屬性都被定義在實(shí)例中,可以向超類型構(gòu)造函數(shù)傳遞參數(shù)
  • 缺陷
    • 不能實(shí)現(xiàn)函數(shù)復(fù)用
    • 超類型原型中的方法對子類型實(shí)例不可見,結(jié)果所有引用類型都只能使用構(gòu)造函數(shù)模式來創(chuàng)建

3)組合繼承

借用構(gòu)造函數(shù)讓超類型屬性直接定義在子類型實(shí)例中;用原型鏈繼承超類型的方法。

  • 優(yōu)點(diǎn)
    結(jié)合了原型鏈和借用構(gòu)造函數(shù)的優(yōu)點(diǎn)
  • 缺陷
    超類型構(gòu)造函數(shù)被兩次調(diào)用,子類型實(shí)例的原型中同時(shí)含有超類型的屬性

4)原型式繼承

定義一個(gè)對象創(chuàng)建函數(shù),將基礎(chǔ)對象傳入,函數(shù)內(nèi)部創(chuàng)建一個(gè)新對象,該新對象以傳入的基礎(chǔ)對象為原型對象。

  • 優(yōu)點(diǎn)
    基于對象而不是基于構(gòu)造函數(shù)建立新對象

5)寄生式繼承

借鑒原型式繼承的思路,定義一個(gè)對象創(chuàng)建函數(shù),函數(shù)接收一個(gè)基礎(chǔ)對象,基于它創(chuàng)建一個(gè)新對象(比如利用原型式繼承來創(chuàng)建),然后對新對象增強(qiáng)后返回。

  • 優(yōu)點(diǎn)
    基于對象創(chuàng)建功能增強(qiáng)的新對象

6)寄生組合式繼承

對組合式繼承加以改進(jìn):基于超類型的原型對象,利用寄生式繼承創(chuàng)建一個(gè)新對象,用這個(gè)新對象代替超類型的實(shí)例作為子類型的原型對象。

  • 優(yōu)點(diǎn)
    在組合式繼承中,我們繼承方法時(shí)實(shí)際上只需要超類型的原型對象,我們可以借用寄生繼承;避免對超類型構(gòu)造函數(shù)的二次調(diào)用,子類型實(shí)例中不再出現(xiàn)超類型屬性。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容