成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript設(shè)置對象的不可拓展

freewolf / 1101人閱讀

摘要:一般來說,默認(rèn)情況下,對象都是可拓展的,我們可以為其屬性進(jìn)行增刪改等操作,也可以更改他們原型的指向,如何讓一個對象變得不可拓展呢,我們可以使用提供的幾個方法,來保證鎖定的對象是不可拓展的可以鎖定對象,設(shè)置對象的不可拓展,可以阻止為對象添加新

一般來說,默認(rèn)情況下,對象都是可拓展的,我們可以為其屬性進(jìn)行增刪改等操作,也可以更改他們原型的指向,如何讓一個對象變得不可拓展呢,我們可以使用ES5提供的幾個方法,來保證鎖定的對象是不可拓展的

Object.preventExtensions

Object.preventExtensions可以鎖定對象,設(shè)置對象的不可拓展,可以阻止為對象添加新的屬性,非嚴(yán)格模式下會默默不起作用,但是嚴(yán)格模式下會報錯,可以用Object.isExtensible判斷對象是否可拓展

var person = {
  name: "cala"
};

Object.preventExtensions(person);

person.name = "John"; 
person.age = 24;
// 嚴(yán)格模式下會報錯: 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 
//  刪除屬性失敗 嚴(yán)格模式下 Uncaught TypeError: Cannot delete property "name" of #

person.age = 30; // 
// 嚴(yán)格模式下會報錯: TypeError: Cannot add property age, object is not extensible

console.log(person) // {name: "cala"}

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  
//上述三個操作,非嚴(yán)格模式不起作用,嚴(yán)格模式會報錯

console.log(person) // {name: "cala"}

總的來說,上述三個操作方法preventExtensions,seal,freeze可以設(shè)置對象的不可拓展性,并且每個方法都針對對象的不可拓展有著不同的限制,另外還有三個判斷方法,isExtensible,isSealed,isFrozen來對對象進(jìn)行操作,返回Boolean值,來判斷對象是否可拓展

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/91405.html

相關(guān)文章

  • js知識梳理1:理解對象屬性特性

    摘要:對象直接量的默認(rèn)值表示能否通過循環(huán)返回屬性。同樣密封對象操作是不可逆的。代表未凍結(jié)已凍結(jié)屬性特性規(guī)則總結(jié)如果對象是不可拓展的,則可以編輯已有的自有屬性,但不能給它添加新屬性。 寫在前面 注:這個系列是本人對js知識的一些梳理,其中不少內(nèi)容來自書籍:Javascript高級程序設(shè)計第三版和JavaScript權(quán)威指南第六版,感謝它們的作者和譯者。有發(fā)現(xiàn)什么問題的,歡迎留言指出。 1.數(shù)據(jù)...

    13651657101 評論0 收藏0
  • 關(guān)于ES模塊你必須要知道一些禁忌(一)

    摘要:沒有模塊化的支持,使用開發(fā)大型應(yīng)用將舉步維艱,所以經(jīng)過大量的實踐,社區(qū)制定了一些模塊加載方案,最主要的有運行于瀏覽器的方案和運行于以為代表的服務(wù)端的方案。該方法返回被凍結(jié)的對象。 背景 ES Module是JavaScript在ES2015版本開始提供的語言標(biāo)準(zhǔn)級別的模塊化方案,在此之前JavaScript一直沒有語言級別的模塊化體系。沒有模塊化的支持,使用JavaScript開發(fā)大型...

    yexiaobai 評論0 收藏0
  • js面試題(下)

    摘要:短路運算返回值是什么又稱為短路或,短路如果左側(cè)為真,則不再進(jìn)行右側(cè)運算,同時返回左側(cè)表達(dá)式運算結(jié)果。上面是不存在的,所有結(jié)果為,轉(zhuǎn)成就是,那么就會運算,把賦值給的同時,返回值也是,所以打印返回結(jié)果是函數(shù)內(nèi)部變量有哪些 DOM元素e的e.getAttribute(propName)和e.propName有什么區(qū)別和聯(lián)系 e.getAttribute(),是標(biāo)準(zhǔn)DOM操作文檔元素屬性的方...

    zhoutao 評論0 收藏0
  • JavaScript對象遍歷

    摘要:簡單說就是一個有一個函數(shù),這個函數(shù)執(zhí)行的返回值一定是一個對象,對象有兩個屬性標(biāo)記迭代是否結(jié)束,標(biāo)記這次迭代的結(jié)果值。 引言 遍歷對象是平常工作中很常見的一個操作,幾乎是日常操作,但是遍歷對象真的是一件很容易的事情么,顯然不是的。 常用的方式 for...in for (variable in object) {...} 這個是一個很常見的用法,相信每個人順手都可以寫出來。但是這里需要主...

    Seay 評論0 收藏0
  • JavaScript對象詳解

    摘要:屬性描述符升級打怪必備技能對象有自己的屬性和方法,對于我們對象的屬性來講,屬性還有自己的屬性,又稱為屬性描述符。這個方法接受三個參數(shù),第一個是指定的對象,第二個是指定的對象參數(shù),第三個當(dāng)然是要修改的屬性描述符了。 對象的聲明有倆種: 字面量 通過new一個構(gòu)造函數(shù)Object 兩者唯一的區(qū)別就是,字面量形式,可以一次賦值多個,通過new Object就得一個一個賦值 數(shù)據(jù)類型 ...

    fancyLuo 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<