1、理解對象
屬性類型:數(shù)據(jù)類型和訪問器類型
數(shù)據(jù)屬性:[[Configurable]]:能否通過delete刪除屬性從而重定義屬性或者能否修改屬性的特性,能否把屬性修改為訪問器屬性
[[Enumerable]]:能否通過for-in 循環(huán)返回屬性
[[Writable]]:能否修改屬性的值
[[Value]]:包含這個屬性的數(shù)據(jù)值
訪問器屬性:[[Configurable]]:能否通過delete刪除屬性從而重定義屬性或者能否修改屬性的特性,能否把屬性修改為數(shù)據(jù)屬性
[[Enumerable]]:能否通過for-in 循環(huán)返回屬性
[[Get]]:在讀取屬性時調(diào)用的函數(shù)
[[Set]]:在寫入屬性時調(diào)用的函數(shù)
2、創(chuàng)建對象
工廠模式:抽象具體對象的過程。用函數(shù)來封裝以特定接口創(chuàng)建對象的細(xì)節(jié)(解決了多次創(chuàng)建對象的問題,但是沒有解決對象識別的問題)
構(gòu)造函數(shù)模式:構(gòu)造函數(shù)以大寫字母開頭它沒有顯式的創(chuàng)建對象,直接將屬性和方法賦給了this對象,沒有ruturn對象。將來可以將它的實例標(biāo)識為一種特定的類型,正是構(gòu)造函數(shù)模式勝過工廠模式的地方。
原型模式:創(chuàng)建的函數(shù)都有一個原型屬性,這個屬性是一個指針,指向一個對象,而這個對象包含可以由特定類型的所有實例共享的屬性和方法。使用原型對象的好處是可以讓所有的對象實例共享它所包含的屬性和方法。
組合使用構(gòu)造函數(shù)模式和原型模式:構(gòu)造模式用于定義實例屬性,而原型模式用于定義方法和共享的屬性。
動態(tài)原型模式:把所有的信息都封裝在構(gòu)造函數(shù)中,而通過在構(gòu)造函數(shù)中初始化模型,又保持了同時使用構(gòu)造函數(shù)和原型的優(yōu)點
寄生構(gòu)造函數(shù)模式:創(chuàng)建一個函數(shù),該函數(shù)的作用是封裝對象的代碼,然后再返回創(chuàng)建的對象。
穩(wěn)妥構(gòu)造函數(shù)模式:遵循與寄生構(gòu)造函數(shù)類似的模式,但是它新創(chuàng)建對象的實例方法不引用this而且不使用new 操作符調(diào)用構(gòu)造函數(shù)。
3、繼承
原生鏈:利用原型讓一個引用類型繼承另一個引用類型的屬性和方法。每個構(gòu)造函數(shù)都有一個原型對象,原型對象都包含一個指向構(gòu)造函數(shù)的指針,而實例都包含一個指向原型的內(nèi)部指針。
繼承通過創(chuàng)建SuperType的實例,并將該實例賦給SubType.prototype實現(xiàn)的。
組合繼承:將原型鏈和借用構(gòu)造函數(shù)的技術(shù)組合到一塊。既通過在原型上定義方法實現(xiàn)了函數(shù)復(fù)用又能保證每個實例都有它自己的屬性。
原型式繼承:可以在不必預(yù)先定義構(gòu)造函數(shù)的情況下實現(xiàn)繼承,其本質(zhì)是執(zhí)行對給定對象的淺復(fù)制。
寄生式繼承:與原型式繼承非常相似,也是基于某個對象或某些信息創(chuàng)建一個對象,然后增強對象,最后返回對象。
寄生組合式繼承:集寄生式繼承和組合繼承的優(yōu)點于一身,是實現(xiàn)基于類型繼承的最有效力的方式。