前端面試江湖--筆記3-如何創(chuàng)建一個(gè)對(duì)象

1,如何創(chuàng)建一個(gè)對(duì)象

① 原始方法:?通過new關(guān)鍵字生成一個(gè)對(duì)象,然后根據(jù)javascript是動(dòng)態(tài)語(yǔ)言的特性來添加屬性和方法,構(gòu)造一個(gè)對(duì)象。其中的this表示調(diào)用該方法的對(duì)象。這種方式的問題是如果需要多次創(chuàng)建對(duì)象,那么需要重復(fù)代碼多次,不利于代碼的復(fù)用。

原始方法

工廠方法:? 這種方式提高了代碼重用率,還可以改變工廠方法,傳入?yún)?shù)賦值。

工廠方法

該方式雖然可以提高代碼的重用率,但和面向?qū)ο笾蓄惖母拍钕啾?,有一個(gè)很大的缺陷。面向?qū)ο髲?qiáng)調(diào)對(duì)象的屬性私有,但對(duì)象的方法是共享的。而上面的工廠方法在創(chuàng)建對(duì)象時(shí),要為每個(gè)對(duì)象創(chuàng)建各自私有的方法。同時(shí),由于為每個(gè)對(duì)象都創(chuàng)建邏輯相同的方法,所以很浪費(fèi)內(nèi)存

工廠方法? 傳參

改進(jìn)代碼:? 下面通過定義幾個(gè)函數(shù)對(duì)象,解決了不同對(duì)象持有函數(shù)對(duì)象的私有問題。現(xiàn)在所有對(duì)象的方法都持有上面兩個(gè)函數(shù)的引用。但這么一來,對(duì)象的函數(shù)又和對(duì)象相互獨(dú)立了,這和面向?qū)ο笾刑囟ǚ椒▽儆谔囟惖乃枷氩环稀?/p>

工廠方法? 改進(jìn)版

構(gòu)造函數(shù)方式:? 構(gòu)造函數(shù)的方式和工廠方式一樣,會(huì)為每個(gè)對(duì)象創(chuàng)建獨(dú)享的函數(shù)對(duì)象。當(dāng)然也可以將這些函數(shù)對(duì)象定義在構(gòu)造函數(shù)外面,這樣又有了對(duì)象和方法相互獨(dú)立的問題。

構(gòu)造函數(shù)方法

原型方法:? 當(dāng)生成Person對(duì)象時(shí),prototype屬性都賦值給了新的對(duì)象。那么屬性和方法是共享的。首先,該方法的問題是構(gòu)造函數(shù)不能傳遞參數(shù),每個(gè)新生成的對(duì)象都有默認(rèn)值。其次,方法共享沒有任何問題,但是,當(dāng)屬性是可改變狀態(tài)的對(duì)象時(shí),屬性共享就有問題了。

原型方法

下面的代碼通過obj1向obj1添加屬性時(shí),obj2的array屬性的元素也跟著受到影響,原因就在于obj1和obj2對(duì)象的array屬性引用的是同一個(gè)Array對(duì)象。

混合的構(gòu)造函數(shù)/原型方法:? 屬性私有后,改變各自的屬性不會(huì)影響別的對(duì)象。同時(shí),方法也是由各個(gè)對(duì)象共享的。在語(yǔ)義上,這符合了面向?qū)ο缶幊痰囊蟆?/p>

混合的構(gòu)造函數(shù)/原型方法

動(dòng)態(tài)原型方法:? 這種方法和 混合的構(gòu)造函數(shù)/原型方法大同小異。只是將方法的添加放到了構(gòu)造函數(shù)之中,同時(shí)在構(gòu)造函數(shù)Person上添加了一個(gè)屬性用來保證if語(yǔ)句只能執(zhí)行一次。在實(shí)際應(yīng)用中,采用的最為廣泛的是 混合的構(gòu)造函數(shù)/原型方法,動(dòng)態(tài)原型方法也很流行。不要單獨(dú)使用構(gòu)造函數(shù)/原型方法。

動(dòng)態(tài)原型方法





最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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