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