对象的扩展(Object.preventExtensions)、密封(Object.seal)和冻结(Object.freeze)

  1. 扩展对象
  • Object.preventExtensions
  • Object.isExtensible
  1. 密封对象
  • Object.seal
  • Object.isSealed
  1. 冻结对象
  • Object.freeze
  • Object.isFrozen

1. Object.preventExtensions

阻止对象扩展,让一个对象变的不可扩展,也就是永远不能再添加新的属性,可以删除原有属性和修改原有属性(能删能改,不能加)

let obja = {
    a: 11,
    b:'我是obja中的b',
    c:'我是obja中的c'
}

Object.preventExtensions(obja)

obja.d = 99

console.log(obja)
// VM418:11 {a: 11, b: "我是obja中的b", c: "我是obja中的c"}

如果使用严格模式就会报错:
VM425:10 Uncaught TypeError: Cannot add property d, object is not extensible

2. Object.isExtensible

判断一个对象是否可扩展,即是否可以给它添加新属性,返回true和false,true表示可以扩展,false表示不能进行扩展

3. Object.seal

让一个对象密封,并返回被密封后的对象。密封对象是指那些不能添加新的属性,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性,但可以修改已有属性的值的对象。(可改,不可加,不可删)

var obj = {name: 'John'}
 
// 密封
Object.seal(obj)
 
// 不能添加新属性
obj.age = 30
console.log(obj.age) // undefined

4. Object.isSealed

判断一个对象是否是密封的(sealed)返回true,false true表示是已经密封的,false表示非密封的。

5. Object.freeze

这个方法比 Object.seal 更加狠,冻结对象是指那些不能添加新的属性,不能修改已有属性的值,不能删除已有属性,以及不能修改已有属性的可枚举性、可配置性、可写性的对象。也就是说,这个对象永远是不可变的。(啥都不能干)

var obj = {name: 'John'}
Object.freeze(obj)
obj.age = 30
console.log(obj.age) // undefined

6.Object.isFrozen

判断一个对象是否被冻结(frozen),true表示非冻结,false表示已冻结

看完这几个方法表示,工作中真的非常少用。就当记录一下。

原文地址:https://www.cnblogs.com/justyouadmin/p/13462039.html