JavaScript中的對(duì)象的extensible屬性介紹
JavaScript中,對(duì)象的extensible屬性用于表示是否允許在對(duì)象中動(dòng)態(tài)添加新的property。ECMAScript 3標(biāo)準(zhǔn)中,所有的對(duì)象都是extensible的。ECMAScript 5標(biāo)準(zhǔn)中,所有的對(duì)象默認(rèn)仍是extensible的,但可以通過(guò)設(shè)定來(lái)改變這一屬性。
查詢一個(gè)對(duì)象是否是extensible的,可以使用Object.isExtensible()語(yǔ)句:
var o = {x:1};
console.log(Object.isExtensible(o));//true
使一個(gè)對(duì)象變成不是extensible的,可以使用Object.preventExtensions()語(yǔ)句:
Object.preventExtensions(o)
console.log(Object.isExtensible(o));//false
值得注意的是,由于沒(méi)有Object.preventExtensions()的反操作語(yǔ)句,因此一旦某個(gè)對(duì)象被設(shè)定為非extensible后,將沒(méi)有辦法重新再將其設(shè)定為extensible。
Object.preventExtensions()語(yǔ)句作用的范圍是對(duì)象自身,原型對(duì)象不受影響。如果某個(gè)對(duì)象被設(shè)定為非extensible,那么其原型對(duì)象中依然可以動(dòng)態(tài)添加property,而這些動(dòng)態(tài)添加的property也依然可以被對(duì)象繼承到。
Object.seal()和Object.freeze()
Object.preventExtensions()可以防止在對(duì)象中動(dòng)態(tài)添加新的property。除了這個(gè)操作,JavaScript中還存在另外兩個(gè)更加嚴(yán)格的操作來(lái)保護(hù)對(duì)象:Object.seal()和Object.freeze()。
Object.seal()的作用是在Object.preventExtensions()的基礎(chǔ)上,設(shè)定所有對(duì)象自身property的configurable屬性為false。與Object.preventExtensions()操作一樣,Object.seal()沒(méi)有反操作,因此一旦將對(duì)象seal了之后將無(wú)法恢復(fù)其狀態(tài)。在JavaScript中,可以通過(guò)Object.isSealed()來(lái)查詢某個(gè)對(duì)象是否被seal了。
Object.freeze()的作用是在Object.seal()的基礎(chǔ)上,將所有對(duì)象自身的property設(shè)定為只讀。與Object.seal()和Object.preventExtensions()操作一樣,Object.freeze()沒(méi)有反操作,因此一旦將對(duì)象freeze了之后將無(wú)法恢復(fù)其狀態(tài)。在JavaScript中,可以通過(guò)Object.isFrozen()來(lái)查詢某個(gè)對(duì)象是否被freeze了。
console.log(Object.isSealed(o));//false
Object.seal(o);
console.log(Object.isSealed(o));//true
console.log(Object.isFrozen(o));//false
Object.freeze(o);
console.log(Object.isFrozen(o));//true
無(wú)論是Object.preventExtensions(),還是Object.seal()和Object.freeze(),其作用范圍均為對(duì)象自身,對(duì)象的原型對(duì)象將不受影響。
- 21個(gè)JavaScript事件(Events)屬性匯總
- Javascript學(xué)習(xí)筆記之?dāng)?shù)組的遍歷和 length 屬性
- JavaScript中獲取鼠標(biāo)位置相關(guān)屬性總結(jié)
- Javascript獲取CSS偽元素屬性的實(shí)現(xiàn)代碼
- 簡(jiǎn)單方法判斷JavaScript對(duì)象為null或者屬性為空
- javascript數(shù)組操作方法小結(jié)和3個(gè)屬性詳細(xì)介紹
- JavaScript中對(duì)象屬性的添加和刪除示例
- javascript數(shù)組操作總結(jié)和屬性、方法介紹
- JavaScript對(duì)象的property屬性詳解
- Javascript訪問(wèn)器屬性實(shí)例分析
相關(guān)文章
js中點(diǎn)擊空白區(qū)域時(shí)文本框與隱藏層的顯示與影藏問(wèn)題
文本框獲得焦點(diǎn)的時(shí)在文本框的下方顯示一個(gè)浮動(dòng)層,點(diǎn)擊文本框隱藏浮動(dòng)層,下面為大家介紹下鼠標(biāo)點(diǎn)擊時(shí)文本框與隱藏層處理問(wèn)題,感興趣的朋友可以參考下2013-08-08JavaScript設(shè)計(jì)模式組合設(shè)計(jì)模式案例
這篇文章主要介紹了JavaScript設(shè)計(jì)模式組合設(shè)計(jì)模式案例,組合設(shè)計(jì)模式是用于將多個(gè)部分通過(guò)組合的方式行成一個(gè)整體,更多相關(guān)內(nèi)容需要的小伙伴可以參考一下2022-06-06js/jquery控制頁(yè)面動(dòng)態(tài)加載數(shù)據(jù) 滑動(dòng)滾動(dòng)條自動(dòng)加載事件的方法
下面小編就為大家?guī)?lái)一篇js/jquery控制頁(yè)面動(dòng)態(tài)加載數(shù)據(jù) 滑動(dòng)滾動(dòng)條自動(dòng)加載事件的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02