首頁 > web前端 > js教程 > JavaScript中的物件的extensible屬性介紹_javascript技巧

JavaScript中的物件的extensible屬性介紹_javascript技巧

WBOY
發布: 2016-05-16 16:23:18
原創
1205 人瀏覽過

JavaScript中,物件的extensible屬性用於表示是否允許在物件中動態新增新的property。 ECMAScript 3標準中,所有的物件都是extensible的。 ECMAScript 5標準中,所有的物件預設仍是extensible的,但可以透過設定來改變這個屬性。

查詢一個物件是否是extensible的,可以使用Object.isExtensible()語句:


複製程式碼 程式碼如下:

var o = {x:1};
console.log(Object.isExtensible(o));//true


使一個物件變成不是extensible的,可以使用Object.preventExtensions()語句:


複製程式碼 程式碼如下:

Object.preventExtensions(o)
console.log(Object.isExtensible(o));//false


值得注意的是,由於沒有Object.preventExtensions()的反操作語句,一旦某個物件設定為非extensible後,將沒有辦法重新將其設定為extensible。

Object.preventExtensions()語句作用的範圍是物件自身,原型物件不受影響。如果某個物件被設定為非extensible,那麼其原型物件中仍可動態加入property,而這些動態新增的property也仍可被物件繼承到。

Object.seal()和Object.freeze()

Object.preventExtensions()可以防止在物件中動態新增新的property。除了這個操作,JavaScript中還存在另外兩個更嚴格的操作來保護物件:Object.seal()和Object.freeze()。

Object.seal()的作用是在Object.preventExtensions()的基礎上,設定所有物件本身property的configurable屬性為false。與Object.preventExtensions()操作一樣,Object.seal()沒有反操作,因此一旦將物件seal了之後將無法恢復其狀態。在JavaScript中,可以透過Object.isSealed()來查詢某個物件是否被seal了。

Object.freeze()的作用是在Object.seal()的基礎上,將所有物件本身的property設定為唯讀。與Object.seal()和Object.preventExtensions()操作一樣,Object.freeze()沒有反操作,因此一旦將物件freeze了之後將無法恢復其狀態。在JavaScript中,可以透過Object.isFrozen()來查詢某個物件是否被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


無論是Object.preventExtensions(),或是Object.seal()和Object.freeze(),其作用範圍均為物件自身,物件的原型物件將不受影響。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板