標籤:com 原廠模式 知識 共用 dia nbsp hub get 參考型別
這個思維導圖是我對Object,原型,原型鏈等知識的總結,主要參考高程一書第六章,寫完才發現這麼多,以後可能會進行精簡。內容可能會出現差錯,歡迎批評指正。下載==>Github
ECMAScript支援物件導向(OO)編程,但不使用類或者介面。對象可以在代碼執行過程中建立和增強,因此具有動態性而非嚴格定義的實體。在沒有類的情況下,可以採用下列模式建立對象。
- 原廠模式,使用簡單的函數建立對象,為對象添加屬性和方法,然後返回對象。這個模式後來被建構函式模式所取代。
- 建構函式模式,可以建立自訂參考型別,可以像建立內建對象執行個體一樣使用new操作符。不過,建構函式模式也有缺點,即它的每個成員都無法得到複用,包括函數。由於函數可以不局限於任何對象(即與對象具有鬆散耦合的特點),因此沒有理由不在多個對象間共用函數。
- 原型模式,使用建構函式的prototype屬性來指定那些應該共用的屬性和方法。組合使用建構函式模式和原型模式時,使用建構函式定義執行個體屬性,而使用原型定義共用的屬性和方法。
JavaScript主要通過原型鏈實現繼承。原型鏈的構建是通過將一個類型的執行個體賦值給另一個建構函式的原型實現的。這樣,子類型就能夠訪問超類型的所有屬性和方法,這一點與基於類的繼承很相似。原型鏈的問題是對象執行個體共用所有繼承的屬性和方法,因此不適宜單獨使用。解決這個問題的技術是借用建構函式,即在子類型建構函式的內部調用超類型建構函式。這樣就可以做到每個執行個體都具有自己的屬性,同時還能保證只使用建構函式模式來定義類型。使用最多的繼承模式是組合繼承,這種模式使用原型鏈繼承共用的屬性和方法,而通過借用建構函式繼承執行個體屬性。此外,還存在下列可供選擇的繼承模式。
- 原型式繼承,可以在不必預先定義建構函式的情況下實現繼承,其本質是執行對給定對象的淺複製。而複製得到的副本還可以得到進一步改造。
- 寄生式繼承,與原型式繼承非常相似,也是基於某個對象或某些資訊建立一個對象,然後增強對象,最後返回對象。為瞭解決組合繼承模式由於多次調用超類型建構函式而導致的低效率問題,可以將這個模式與組合繼承一起使用。
- 寄生組合式繼承,集寄生式繼承和組合繼承的優點與一身,是實現基於類型繼承的最有效方式。
JavaScript對象、原型、原型鏈知識總結思維導圖