W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
ECMAScript 不使用諸如 C++,Smalltalk,Java 中的類。相反,對象可以通過各種方式創(chuàng)建,包括字面符號,或通過 構(gòu)造器 創(chuàng)建對象然后運(yùn)行代碼初始化其全部或部分屬性值,為這些屬性分配初始值。每個(gè)構(gòu)造器是一個(gè)擁有名為“prototype”的屬性的函數(shù)。此屬性用于實(shí)現(xiàn) 基于原型的繼承 和 共享屬性 。構(gòu)造器通過 new 表達(dá)式創(chuàng)建對象:例如,new Date(2009,11) 創(chuàng)建一個(gè)新 Date 對象。不使用 new 調(diào)用一個(gè)構(gòu)造器的結(jié)果,依賴構(gòu)造器本身。例如,Date() 產(chǎn)生一個(gè)表示當(dāng)前日期時(shí)間的字符串,而不是一個(gè)對象。
每個(gè)由構(gòu)造器創(chuàng)建的對象,都有一個(gè)隱式引用 ( 叫做對象的原型 ) 鏈接到構(gòu)造器的“prototype”屬性值。再者,原型可能有一個(gè)非空 (non-null) 隱式引用鏈接到它自己的原型,以此類推,這叫做 原型鏈 。當(dāng)向?qū)ο蟮囊粋€(gè)屬性提出引用,引用會(huì)指向原型鏈中包含此屬性名的第一個(gè)對象的此屬性。換句話說,首先檢查直接提及的對象的同名屬性,如果對象包含同名的屬性,引用即指向此屬性,如果該對象不包含同名的屬性,則下一步檢查對象的原型;以此類推。
一般情況下基于類的面向?qū)ο笳Z言的實(shí)例擁有狀態(tài),類擁有方法,并且只能繼承結(jié)構(gòu)和行為。在 ECMAScript 中,對象擁有狀態(tài)和方法,并且結(jié)構(gòu),行為,狀態(tài)全都可繼承。
不直接包含原型中包含的特定屬性的所有對象會(huì)共享此屬性及屬性值。圖 1 說明了這一點(diǎn):
CF 是一個(gè)構(gòu)造器(也是一個(gè)對象)。五個(gè)對象已用 new 表達(dá)式創(chuàng)建 : cf1, cf2, cf3, cf4, cf5。每個(gè)對象都有名為 q1 和 q2 的屬性。虛線表示隱式原型關(guān)系;例如:cf3 的原型是 CFp。構(gòu)造器 CF 自己有名為 P1 和 P2 的兩個(gè)屬性 , 這對 CFp, cf1, cf2, cf3, cf4, cf5 是不可見的。CFp 的名為 CFP1 的屬性共享給 cf1, cf2, cf3, cf4, cf5 ( 沒有 CF), 以及在 CFp 的隱式原型鏈中找不到任何名為 q1, q2, 或 CFP1 的屬性。 請注意 ,CF 和 CFp 之間沒有隱式原型鏈接。
不同于基于類的對象語言,屬性可以通過賦值的方式動(dòng)態(tài)添加給對象。也就是說,構(gòu)造器并不是非要對構(gòu)造的對象的全部或任何屬性命名或賦值。上圖中,可以給 CFp 添加新屬性值的方式為 cf1, cf2, cf3, cf4,cf5 添加一個(gè)新的共享屬性。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: