摘要:一般來說,默認情況下,對象都是可拓展的,我們可以為其屬性進行增刪改等操作,也可以更改他們原型的指向,如何讓一個對象變得不可拓展呢,我們可以使用提供的幾個方法,來保證鎖定的對象是不可拓展的可以鎖定對象,設置對象的不可拓展,可以阻止為對象添加新
一般來說,默認情況下,對象都是可拓展的,我們可以為其屬性進行增刪改等操作,也可以更改他們原型的指向,如何讓一個對象變得不可拓展呢,我們可以使用ES5提供的幾個方法,來保證鎖定的對象是不可拓展的
Object.preventExtensions
Object.preventExtensions可以鎖定對象,設置對象的不可拓展,可以阻止為對象添加新的屬性,非嚴格模式下會默默不起作用,但是嚴格模式下會報錯,可以用Object.isExtensible判斷對象是否可拓展
var person = { name: "cala" }; Object.preventExtensions(person); person.name = "John"; person.age = 24; // 嚴格模式下會報錯: TypeError: Cannot add property age, object is not extensible console.log(person) // {name: "John"}
Object.seal
Object.seal和上面的Object.preventExtensions方法作用是一樣,字面意思是密封,也是用來防止對象被拓展,另外還可以阻止對象已有屬性和方法的刪除,可以用Object.isSealed判斷對象是否可拓展
var person = { name: "cala" }; Object.seal(person); console.log(Object.isExtensible(person)); // false console.log(Object.isSealed(person)); // true delete person.name // 刪除屬性失敗 嚴格模式下 Uncaught TypeError: Cannot delete property "name" of #
Object.freeze
作用與上述兩個方法大致相同,字面意思是冰凍,還可以阻止對象的屬性和方法被修改,可以用Object.isFrozen判斷對象是否可拓展
var person = { name: "cala" }; Object.freeze(person); console.log(Object.isExtensible(person)); // false console.log(Object.isSealed(person)); // true console.log(Object.isFrozen(person)); // true person.name = "xyz"; person.age = 30; delete person.name //上述三個操作,非嚴格模式不起作用,嚴格模式會報錯 console.log(person) // {name: "cala"}
總的來說,上述三個操作方法preventExtensions,seal,freeze可以設置對象的不可拓展性,并且每個方法都針對對象的不可拓展有著不同的限制,另外還有三個判斷方法,isExtensible,isSealed,isFrozen來對對象進行操作,返回Boolean值,來判斷對象是否可拓展
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91405.html
摘要:對象直接量的默認值表示能否通過循環返回屬性。同樣密封對象操作是不可逆的。代表未凍結已凍結屬性特性規則總結如果對象是不可拓展的,則可以編輯已有的自有屬性,但不能給它添加新屬性。 寫在前面 注:這個系列是本人對js知識的一些梳理,其中不少內容來自書籍:Javascript高級程序設計第三版和JavaScript權威指南第六版,感謝它們的作者和譯者。有發現什么問題的,歡迎留言指出。 1.數據...
摘要:沒有模塊化的支持,使用開發大型應用將舉步維艱,所以經過大量的實踐,社區制定了一些模塊加載方案,最主要的有運行于瀏覽器的方案和運行于以為代表的服務端的方案。該方法返回被凍結的對象。 背景 ES Module是JavaScript在ES2015版本開始提供的語言標準級別的模塊化方案,在此之前JavaScript一直沒有語言級別的模塊化體系。沒有模塊化的支持,使用JavaScript開發大型...
摘要:簡單說就是一個有一個函數,這個函數執行的返回值一定是一個對象,對象有兩個屬性標記迭代是否結束,標記這次迭代的結果值。 引言 遍歷對象是平常工作中很常見的一個操作,幾乎是日常操作,但是遍歷對象真的是一件很容易的事情么,顯然不是的。 常用的方式 for...in for (variable in object) {...} 這個是一個很常見的用法,相信每個人順手都可以寫出來。但是這里需要主...
摘要:屬性描述符升級打怪必備技能對象有自己的屬性和方法,對于我們對象的屬性來講,屬性還有自己的屬性,又稱為屬性描述符。這個方法接受三個參數,第一個是指定的對象,第二個是指定的對象參數,第三個當然是要修改的屬性描述符了。 對象的聲明有倆種: 字面量 通過new一個構造函數Object 兩者唯一的區別就是,字面量形式,可以一次賦值多個,通過new Object就得一個一個賦值 數據類型 ...
閱讀 2365·2023-04-25 20:07
閱讀 3303·2021-11-25 09:43
閱讀 3662·2021-11-16 11:44
閱讀 2529·2021-11-08 13:14
閱讀 3178·2021-10-19 11:46
閱讀 895·2021-09-28 09:36
閱讀 2975·2021-09-22 10:56
閱讀 2374·2021-09-10 10:51