JS对象可配置性配置

undefined

Posted by NeptLiang on July 6, 2022

Object.preventExtensions()

特性

  • 阻止添加自身的属性。

影响范围

  • 其对象类型的原型依然可以添加新的属性

  • 该方法使得目标对象的 [[prototype]] 不可变;任何重新赋值 [[prototype]] 操作都会抛出 TypeError 。这种行为只针对内部的 [[prototype]] 属性, 目标对象的其它属性将保持可变

Object.seal()

特性

  • 阻止添加新属性

  • 并将所有现有属性标记为不可配置

    属性不可配置的效果就是属性变得不可删除,以及一个数据属性不能被重新定义成为访问器属性,或者反之。

  • 当前属性的值只要原来是可写的就可以改变

影响范围

  • 不会影响从原型链上继承的属性
  • __proto__ 属性的值也会不能修改

Object.freeze()

特性

  • 不能向这个对象添加新的属性
  • 不能删除已有属性
  • 不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值

影响范围

冻结一个对象后该对象的原型也不能被重新分配

总结

方法 | 添加 | 修改 | 删除 —————————–|—–|——|—- Object.preventExtensions() Object.seal() Object.freeze()

  • 返回值:返回原对象的引用

  • 反向操作时:静默失败或抛出TypeError(最常见的情况是strict mode中,但不排除其他情况)

  • 对原始类型参数的处理:在ES5中,如果参数不是一个对象类型(而是原始类型),将抛出一个TypeError异常。在ES2015中,非对象参数将被视为一个不可扩展的普通对象,因此会被直接返回

  • 通过Object.defineProperty添加属性时:将会报错(不论是不是严格模式中)


//End of Article


公众号二维码