摘要:嚴(yán)格來說,這意味著對象是無特定順序的值的數(shù)組。構(gòu)造函數(shù)式缺點是在創(chuàng)建對象時,特別針對對象的屬性指向函數(shù)時,會重復(fù)的創(chuàng)建函數(shù)實例。此外,組合模式還支持向構(gòu)造函數(shù)傳遞參數(shù),可謂是集兩家之所長。
一般認(rèn)為,js是面向過程模型的語言,很多前端開發(fā)者,也偏向以面向過程的方式編寫代碼,其實在ECMA中是這樣定義過對象(object)的,“屬性的無序集合,每個屬性存放一個原始值、對象或函數(shù)”。嚴(yán)格來說,這意味著對象是無特定順序的值的數(shù)組。其中的屬性或方法都有一個名字,根據(jù)這個名字可以訪問相映射的值(值可以是基本值/對象/方法)。
在其他的類語言中,對象其實是基于模板來創(chuàng)建的,通過定義一個類作為對現(xiàn)實的抽象,然后由類來實例化對象;而在原型語言(比如js)中,對象是以通過克隆另一個對象的方式創(chuàng)建,被克隆的母體稱為原型對象。
創(chuàng)建對象的幾中方式:1.工廠模式
2.構(gòu)造函數(shù)式
3.原型模式
4.構(gòu)造函數(shù)及原型模式的組合式
幾種方式的對比1.工廠模式
可以傳遞參數(shù),但缺點是無法識別對象類型,因為創(chuàng)建對象都是使用Object的原生構(gòu)造函數(shù)來完成的。
2.構(gòu)造函數(shù)式
缺點是在創(chuàng)建對象時,特別針對對象的屬性指向函數(shù)時,會重復(fù)的創(chuàng)建函數(shù)實例。
3.原型模式
缺點是省略了為構(gòu)造函數(shù)傳遞初始化參數(shù),這在一定程序帶來不便;另外,最主要是當(dāng)對象的屬性是引用類型時,它的值是不變的,總是引用同一個外部對象,所有實例對該對象的操作都會其它實例。
4.構(gòu)造函數(shù)及原型模式的組合式
最為常用的定義類型方式,結(jié)合構(gòu)造函數(shù)模式與原型模式的優(yōu)點。構(gòu)造函數(shù)模式用于定義實例的屬性,而原型模式用于定義方法和共享的屬性。結(jié)果,每個實例都會有自己的一份實例屬性的副本,但同時又共享著對方方法的引用,最大限度的節(jié)約內(nèi)存。此外,組合模式還支持向構(gòu)造函數(shù)傳遞參數(shù),可謂是集兩家之所長。
注:以上內(nèi)容參考《JavaScript 高級程序設(shè)計》
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/52056.html
摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍(lán)圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍(lán)圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:很多情況下,通常一個人類,即創(chuàng)建了一個具體的對象。對象就是數(shù)據(jù),對象本身不包含方法。類是相似對象的描述,稱為類的定義,是該類對象的藍(lán)圖或原型。在中,對象通過對類的實體化形成的對象。一類的對象抽取出來。注意中,對象一定是通過類的實例化來的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 馬上就要到七夕了,離年底老媽老爸...
摘要:是完全的面向?qū)ο笳Z言,它們通過類的形式組織函數(shù)和變量,使之不能脫離對象存在。而在基于原型的面向?qū)ο蠓绞街?,對象則是依靠構(gòu)造器利用原型構(gòu)造出來的。 JavaScript 函數(shù)式腳本語言特性以及其看似隨意的編寫風(fēng)格,導(dǎo)致長期以來人們對這一門語言的誤解,即認(rèn)為 JavaScript 不是一門面向?qū)ο蟮恼Z言,或者只是部分具備一些面向?qū)ο蟮奶卣?。本文將回歸面向?qū)ο蟊疽?,從對語言感悟的角度闡述為什...
摘要:用代碼可以這樣描述安全到達(dá)國外面向過程既然說了面向?qū)ο?,那么與之對應(yīng)的就是面向過程。小結(jié)在這篇文章中,介紹了什么是面向?qū)ο蠛兔嫦蜻^程,以及中對象的含義。 這是 javascript 面向?qū)ο蟀鎵K的第一篇文章,主要講解對面向?qū)ο笏枷氲囊粋€理解。先說說什么是對象,其實這個還真的不好說。我們可以把自己當(dāng)成一個對象,或者過年的時候相親,找對象,那么你未來的老婆也是一個對象。我們就要一些屬性,比...
摘要:之前,本質(zhì)上不能算是一門面向?qū)ο蟮木幊陶Z言,因為它對于封裝繼承多態(tài)這些面向?qū)ο笳Z言的特點并沒有在語言層面上提供原生的支持。所以在中出現(xiàn)了等關(guān)鍵字,解決了面向?qū)ο笾谐霈F(xiàn)了問題。 ES6之前,javascript本質(zhì)上不能算是一門面向?qū)ο蟮木幊陶Z言,因為它對于封裝、繼承、多態(tài)這些面向?qū)ο笳Z言的特點并沒有在語言層面上提供原生的支持。但是,它引入了原型(prototype)的概念,可以讓我們以...
閱讀 1840·2023-04-25 15:50
閱讀 1347·2021-09-22 15:49
閱讀 2989·2021-09-22 15:06
閱讀 3733·2019-08-30 15:54
閱讀 2380·2019-08-29 11:33
閱讀 2163·2019-08-23 17:56
閱讀 2258·2019-08-23 17:06
閱讀 1340·2019-08-23 15:55