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×××

转载于:https://www.cnblogs.com/amiezhang/p/11312973.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值