摘要:使用小細(xì)節(jié)這幾天遇到一個坑,講的是保護對象的其中一種方法。封閉方法可以讓一個對象密封,并返回被密封后的對象。但是有個例外,允許非配置屬性從可寫狀態(tài)變成只讀狀態(tài),因為數(shù)組的屬性總是可寫的且不可配置。如果沒有這個例外就不能凍結(jié)數(shù)組。
Javascript(Object.seal)&使用小細(xì)節(jié)
這幾天遇到一個坑,講的是js保護對象的其中一種方法。封閉(Sealing)
Object.seal(obj)
Object.seal()
方法可以讓一個對象密封,并返回被密封后的對象。密封對象是指那些不能添加新的屬性,不能刪除已有屬性,以及不能修改已有屬性的可枚舉性、可配置性、可寫性,但可能可以修改已有屬性的值的對象。
調(diào)用了seal這個函數(shù),會把屬性的configurable設(shè)置為false,也就是不能修改他的屬性特性。
不知道各位有沒有發(fā)現(xiàn)其中有一個小小的問題。configurable明明設(shè)置為false,但是我還是可以修改它的可寫性,writable從原來的true->false。
后來經(jīng)過一番查書之后,才發(fā)現(xiàn)一個小小的細(xì)節(jié)。
configurable持有一個布爾值,如果它是false,那么你不能刪除、改變屬性的人和特性,除了value,也不能把它從數(shù)據(jù)屬性轉(zhuǎn)換為訪問其屬性,反之亦然,它控制著屬性元數(shù)據(jù)的可寫性。但是有個例外,js允許非配置屬性從可寫狀態(tài)變成只讀狀態(tài),因為數(shù)組的屬性length總是可寫的且不可配置。如果沒有這個例外就不能凍結(jié)數(shù)組。
所以如果是一開始使用默認(rèn)的可寫性writable=true;他是可以被允許在configurable為false的時候改變成為false的。那這時候問題又來了, 如果我已經(jīng)顯性設(shè)置了可寫性為true呢?
t.foo也是被改變成為false,所以說明不管顯隱性聲明可寫行,在不可配置的情況下依然可以總是可以被從可讀可寫改為只讀。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/80311.html
摘要:譯者按使用和,可以禁止重寫對象。引入了一些方法,允許開發(fā)者限制對象重寫。不要重寫他人的對象不要重寫他人的對象,這是的黃金法則。如果你修改的是對象比如,這會導(dǎo)致非常嚴(yán)重的后果。 譯者按: 使用Object.preventExtensions()、Object.seal()和Object.freeze(),可以禁止重寫JavaScript對象。 譯者:Fundebug 原文:Preve...
摘要:它將返回目標(biāo)對象。封閉對象方法判斷一個對象是否被密封。為源對象為修改的屬性名或設(shè)置,同上方法返回一個給定對象自身可枚舉屬性的鍵值對數(shù)組方法返回指定對象上一個自有屬性對應(yīng)的屬性描述符方法判斷兩個值是否是相同的值。 對象作為引用類型,工作中免不了復(fù)制對象,下面來看看克隆的方法 Object.assign() 方法用于將所有可枚舉屬性的值從一個或多個源對象復(fù)制到目標(biāo)對象。它將返回目標(biāo)對象。淺...
摘要:一般來說,默認(rèn)情況下,對象都是可拓展的,我們可以為其屬性進行增刪改等操作,也可以更改他們原型的指向,如何讓一個對象變得不可拓展呢,我們可以使用提供的幾個方法,來保證鎖定的對象是不可拓展的可以鎖定對象,設(shè)置對象的不可拓展,可以阻止為對象添加新 一般來說,默認(rèn)情況下,對象都是可拓展的,我們可以為其屬性進行增刪改等操作,也可以更改他們原型的指向,如何讓一個對象變得不可拓展呢,我們可以使用ES...
摘要:等同于構(gòu)造函數(shù)與的用法很相似,幾乎一模一樣。實例對象的方法接受一個字符串作為參數(shù),返回一個布爾值,表示該實例對象自身是否具有該屬性。等同于方法生成的對象,繼承了它的原型對象的構(gòu)造函數(shù)。 分類 Object() 函數(shù) Object 本身是一個函數(shù),用來將任意值轉(zhuǎn)為對象。 如果參數(shù)為空(或者為 undefined 和 null),Object() 返回一個空對象。 var obj = Ob...
摘要:也就是說,屬性控制了屬性描述對象的可寫性??杀闅v性返回一個布爾值,表示目標(biāo)屬性是否可遍歷運算符不管某個屬性是對象自身的還是繼承的,都會返回。上面的寫法與定義屬性描述對象是等價的,而且使用更廣泛。 屬性描述對象 概述Object.getOwnPropertyDescriptor()Object.getOwnPropertyNames()Object.defineProperty(),Ob...
閱讀 3265·2021-09-02 15:41
閱讀 2829·2021-09-02 09:48
閱讀 1368·2019-08-29 13:27
閱讀 1157·2019-08-26 13:37
閱讀 832·2019-08-26 11:56
閱讀 2479·2019-08-26 10:24
閱讀 1638·2019-08-23 18:07
閱讀 2615·2019-08-23 15:16