JS對象-不可擴展對象、密封對象、凍結對象


不可擴展對象

Object.preventExtensions()

僅阻止添加自身的屬性。但屬性仍然可以添加到對象原型。

可以用 Object.isExtensible(obj) 來判斷對象是否可擴展

 

密封對象

Object.seal()

密封對象不可擴展,而且已有的屬性成員[[configurable]]特性將被設置成false

可以用 Object.isSealed() 來判斷對象是否已經被密封

 

凍結對象

Object.freeze()

凍結的對象既不可以擴展,又是密封的,而且對象數據屬性的[[writable]]特性會被設置為false。 

由於訪問器屬性沒有writable,所以訪問器屬性還是可以用的:

let _obj = {name: 123}
let obj = {}

Object.defineProperty(obj, 'name', {
    configurable: true,
    enumerable: true,
    set(val) {
        _obj.name = val;
    },
    get() {
        return _obj.name
    }
})

Object.freeze(obj);
obj.name //123
obj.name = 666;
obj.name // 666

總結:

方法名 增(extensible) 刪(configurable) 改(writable)
Object.preventExtensions ×
Object.seal × ×
Object.freeze × × ×


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM