手写Object.freeze()

Object.freeze能防止对象的属性被添加、删除或修改,确保数据的不可变性。它通过设置属性的configurable、enumerable和writable为false来实现。然而,这只能实现浅冻结,不能影响到对象的嵌套属性。Object.seal则进一步阻止添加新属性,但允许修改已有属性的值。提供的代码示例展示了如何使用Object.defineProperty配合Object.seal来增强对象的保护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:Object.freeze详解

简单来说就是:

  • 不能添加新属性
  • 不能删除已有属性
  • 不能修改已有属性的值
  • 不能修改原型
  • 不能修改已有属性的可枚举性、可配置性、可写性
  • 只能浅冻结,不能深冻结

通过Object.defineProperty的几个属性:

  1. configurable ,属性是否可配置。可配置的含义包括:是否可以删除属性(delete ),是否可以修改属性的 writable 、 enumerable 、configurable 属性。
  2. enumerable ,属性是否可枚举。可枚举的含义包括:是否可以通过for…in 遍历到,是否可以通过 Object.keys() 方法获取属性名称。
  3. writable ,属性是否可重写。可重写的含义包括:是否可以对属性进行重新赋值。
  4. value ,属性的默认值。
  5. set ,赋值。一旦属性被重新赋值,此方法被自动调用。
  6. get ,取值。一旦属性被访问读取,此方法被自动调用。

Object.definedProperty()方法可以定义对象的属性的特性。如可不可以删除、可不可以修改等等,通过Object.seal()方法可以实现不能删除,不能新增对象属性等等功能。

写法如下:

cconst _objectFreeze = object => {
    // 补全代码
    for (var key in object) {
        Object.defineProperty(object, key, {
            writable: false,
        })
    }
    Object.seal(object)
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值