摘要:一般來說,默認(rèn)情況下,對(duì)象都是可拓展的,我們可以為其屬性進(jìn)行增刪改等操作,也可以更改他們?cè)偷闹赶?,如何讓一個(gè)對(duì)象變得不可拓展呢,我們可以使用提供的幾個(gè)方法,來保證鎖定的對(duì)象是不可拓展的可以鎖定對(duì)象,設(shè)置對(duì)象的不可拓展,可以阻止為對(duì)象添加新
一般來說,默認(rèn)情況下,對(duì)象都是可拓展的,我們可以為其屬性進(jìn)行增刪改等操作,也可以更改他們?cè)偷闹赶颍绾巫屢粋€(gè)對(duì)象變得不可拓展呢,我們可以使用ES5提供的幾個(gè)方法,來保證鎖定的對(duì)象是不可拓展的
Object.preventExtensions
Object.preventExtensions可以鎖定對(duì)象,設(shè)置對(duì)象的不可拓展,可以阻止為對(duì)象添加新的屬性,非嚴(yán)格模式下會(huì)默默不起作用,但是嚴(yán)格模式下會(huì)報(bào)錯(cuò),可以用Object.isExtensible判斷對(duì)象是否可拓展
var person = { name: "cala" }; Object.preventExtensions(person); person.name = "John"; person.age = 24; // 嚴(yán)格模式下會(huì)報(bào)錯(cuò): TypeError: Cannot add property age, object is not extensible console.log(person) // {name: "John"}
Object.seal
Object.seal和上面的Object.preventExtensions方法作用是一樣,字面意思是密封,也是用來防止對(duì)象被拓展,另外還可以阻止對(duì)象已有屬性和方法的刪除,可以用Object.isSealed判斷對(duì)象是否可拓展
var person = { name: "cala" }; Object.seal(person); console.log(Object.isExtensible(person)); // false console.log(Object.isSealed(person)); // true delete person.name // 刪除屬性失敗 嚴(yán)格模式下 Uncaught TypeError: Cannot delete property "name" of #
Object.freeze
作用與上述兩個(gè)方法大致相同,字面意思是冰凍,還可以阻止對(duì)象的屬性和方法被修改,可以用Object.isFrozen判斷對(duì)象是否可拓展
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 //上述三個(gè)操作,非嚴(yán)格模式不起作用,嚴(yán)格模式會(huì)報(bào)錯(cuò) console.log(person) // {name: "cala"}
總的來說,上述三個(gè)操作方法preventExtensions,seal,freeze可以設(shè)置對(duì)象的不可拓展性,并且每個(gè)方法都針對(duì)對(duì)象的不可拓展有著不同的限制,另外還有三個(gè)判斷方法,isExtensible,isSealed,isFrozen來對(duì)對(duì)象進(jìn)行操作,返回Boolean值,來判斷對(duì)象是否可拓展
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/91405.html
摘要:對(duì)象直接量的默認(rèn)值表示能否通過循環(huán)返回屬性。同樣密封對(duì)象操作是不可逆的。代表未凍結(jié)已凍結(jié)屬性特性規(guī)則總結(jié)如果對(duì)象是不可拓展的,則可以編輯已有的自有屬性,但不能給它添加新屬性。 寫在前面 注:這個(gè)系列是本人對(duì)js知識(shí)的一些梳理,其中不少內(nèi)容來自書籍:Javascript高級(jí)程序設(shè)計(jì)第三版和JavaScript權(quán)威指南第六版,感謝它們的作者和譯者。有發(fā)現(xiàn)什么問題的,歡迎留言指出。 1.數(shù)據(jù)...
摘要:沒有模塊化的支持,使用開發(fā)大型應(yīng)用將舉步維艱,所以經(jīng)過大量的實(shí)踐,社區(qū)制定了一些模塊加載方案,最主要的有運(yùn)行于瀏覽器的方案和運(yùn)行于以為代表的服務(wù)端的方案。該方法返回被凍結(jié)的對(duì)象。 背景 ES Module是JavaScript在ES2015版本開始提供的語言標(biāo)準(zhǔn)級(jí)別的模塊化方案,在此之前JavaScript一直沒有語言級(jí)別的模塊化體系。沒有模塊化的支持,使用JavaScript開發(fā)大型...
摘要:短路運(yùn)算返回值是什么又稱為短路或,短路如果左側(cè)為真,則不再進(jìn)行右側(cè)運(yùn)算,同時(shí)返回左側(cè)表達(dá)式運(yùn)算結(jié)果。上面是不存在的,所有結(jié)果為,轉(zhuǎn)成就是,那么就會(huì)運(yùn)算,把賦值給的同時(shí),返回值也是,所以打印返回結(jié)果是函數(shù)內(nèi)部變量有哪些 DOM元素e的e.getAttribute(propName)和e.propName有什么區(qū)別和聯(lián)系 e.getAttribute(),是標(biāo)準(zhǔn)DOM操作文檔元素屬性的方...
摘要:簡單說就是一個(gè)有一個(gè)函數(shù),這個(gè)函數(shù)執(zhí)行的返回值一定是一個(gè)對(duì)象,對(duì)象有兩個(gè)屬性標(biāo)記迭代是否結(jié)束,標(biāo)記這次迭代的結(jié)果值。 引言 遍歷對(duì)象是平常工作中很常見的一個(gè)操作,幾乎是日常操作,但是遍歷對(duì)象真的是一件很容易的事情么,顯然不是的。 常用的方式 for...in for (variable in object) {...} 這個(gè)是一個(gè)很常見的用法,相信每個(gè)人順手都可以寫出來。但是這里需要主...
摘要:屬性描述符升級(jí)打怪必備技能對(duì)象有自己的屬性和方法,對(duì)于我們對(duì)象的屬性來講,屬性還有自己的屬性,又稱為屬性描述符。這個(gè)方法接受三個(gè)參數(shù),第一個(gè)是指定的對(duì)象,第二個(gè)是指定的對(duì)象參數(shù),第三個(gè)當(dāng)然是要修改的屬性描述符了。 對(duì)象的聲明有倆種: 字面量 通過new一個(gè)構(gòu)造函數(shù)Object 兩者唯一的區(qū)別就是,字面量形式,可以一次賦值多個(gè),通過new Object就得一個(gè)一個(gè)賦值 數(shù)據(jù)類型 ...
閱讀 2453·2023-04-25 20:07
閱讀 3374·2021-11-25 09:43
閱讀 3759·2021-11-16 11:44
閱讀 2583·2021-11-08 13:14
閱讀 3234·2021-10-19 11:46
閱讀 950·2021-09-28 09:36
閱讀 3152·2021-09-22 10:56
閱讀 2443·2021-09-10 10:51