对象的封闭

如果希望限制对对象进行修改,就需要用到以下的方法之一:

  • Object.preventExtensions()
    Object.preventExtensions()方法让一个对象变的不可扩展,也就是永远不能再添加新的属性。Object.preventExtensions()仅阻止添加自身的属性,属性仍然可以添加到对象原型。不可扩展对象的属性可能仍然可被删除。
// 正常对象可以扩展
const ob = { name: 'object' }
ob.title = 'title'
console.log(ob) // {name: "object", title: "title"}

// 阻止扩展 但是不阻止修改/删除
const ob = { name: 'object' }
Object.preventExtensions(ob)
ob.title = 'title'
console.log(ob) // {name: "object"}
ob.name = 'new object'
console.log(ob) // {name: "new object"}
delete ob.name
console.log(ob) // {}
  • Object.seal()
    Object.seal()方法封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。当前属性的值只要可写就可以改变。同时数据属性不能被重新定义成为访问器属性。
const ob = { name: 'object' }
Object.seal(ob)

// 阻止扩展
ob.title = 'title'
console.log(ob) // {name: "object"}
// 可以修改
ob.name = 'new object'
console.log(ob) // {name: "new object"}
// 不可删除
delete ob.name
console.log(ob) // {name: "new object"}
  • Object.freeze()
    Object.freeze()方法可以冻结一个对象。一个被冻结的对象再也不能被修改。冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。

为了检测对象是否被限制修改,有以下3个对应的方法

  • Object.isExtensible()
  • Object.isSealed()
  • Object.isFrozen()

你可能感兴趣的:(对象的封闭)