關於JavaScript的學習(六)——面向對象的程序設計

第六章


  • ECMAScript 支持面向對象(OO)編程,但不使用類或者接口。對象可以在代碼執行過程中創建和增強,因此具有動態性而非嚴格定義的實體。在沒有類的情況下,可以採用下列模式創建對象。
模式 詳解
工廠模式 使用簡單的函數創建對象,爲對象添加屬性和方法,然後返回對象。這個模式後來被構造函數模式所取代
構造函數模式 可以創建自定義引用類型,可以像創建內置對象實例一樣使用 new 操作符。不過,構造函數模式也有缺點,即它的每個成員都無法得到複用,包括函數。由於函數可以不侷限於任何對象(即與對象具有鬆散耦合的特點),因此沒有理由不在多個對象間共享函數
原型模式 使用構造函數的 prototype 屬性來指定那些應該共享的屬性和方法。組合使用構造函數模式和原型模式時,使用構造函數定義實例屬性,而使用原型定義共享的屬性和方法

  • 原型鏈的構建是通過將一個類型的實例賦值給另一個構造函數的原型實現的。這樣,子類型就能夠訪問超類型的所有屬性和方法,這一點與基於類的繼承很相似。原型鏈的問題是對象實例共享所有繼承的屬性和方法,因此不適宜單獨使用。解決這個問題的技術是借用構造函數,即在子類型構造函數的內部調用超類型構造函數。這樣就可以做到每個實例都具有自己的屬性,同時還能保證只使用構造函數模式來定義類型。使用最多的繼承模式是組合繼承,這種模式使用原型鏈繼承共享的屬性和方法,而通過借用構造函數繼承實例屬性。
  • 此外,還存在下列可供選擇的繼承模式。
模式 詳解
原型式繼承 可以在不必預先定義構造函數的情況下實現繼承,其本質是執行對給定對象的淺複製。而複製得到的副本還可以得到進一步改造
寄生式繼承 與原型式繼承非常相似,也是基於某個對象或某些信息創建一個對象,然後增強對象,最後返回對象。爲了解決組合繼承模式由於多次調用超類型構造函數而導致的低效率問題,可以將這個模式與組合繼承一起使用
寄生組合式繼承 集寄生式繼承和組合繼承的優點與一身,是實現基於類型繼承的最有效方式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章