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

begin: 20170702
version: 20170724

1. 創(chuàng)建對象

2. 繼承

1)原型鏈

將超類型實例直接作為子類型的原型對象

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

2)借用構造函數(shù)

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

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

3)組合繼承

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

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

4)原型式繼承

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

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

5)寄生式繼承

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

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

6)寄生組合式繼承

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

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

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

  • 博客內(nèi)容:什么是面向對象為什么要面向對象面向對象編程的特性和原則理解對象屬性創(chuàng)建對象繼承 什么是面向對象 面向對象...
    _Dot912閱讀 1,545評論 3 12
  • 第5章 引用類型 引用類型的值(對象)是引用類型的一個示例。在ECMAScript 中,引用類型是一種數(shù)據(jù)結構,用...
    力氣強閱讀 817評論 0 0
  • 本章內(nèi)容 理解對象屬性 理解并創(chuàng)建對象 理解繼承 面向對象語言有一個標志,那就是它們都有類的概念,而通過類可以創(chuàng)建...
    悶油瓶小張閱讀 972評論 0 1
  • 說起支付寶,相信大家伙心里都熟悉的不要不要的,畢竟馬云爸爸影響力擺在眼前,想不接觸都難。以前出門必帶三大樣:錢...
    Venholl閱讀 13,457評論 13 12
  • 最近幾天先后一直被“騰訊媒體開放平臺”“QQ公眾號”刷屏。在不聊聊互聯(lián)網(wǎng)實在是過意不去了。 喧鬧已久的QQ公眾號據(jù)...
    魏巍日記閱讀 556評論 0 2

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