对象的扩展(Object.preventExtensions)、密封(Object.seal)和冻结(Object.freeze)
- 扩展对象
- Object.preventExtensions
- Object.isExtensible
- 密封对象
- Object.seal
- Object.isSealed
- 冻结对象
- 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表示已冻结
看完这几个方法表示,工作中真的非常少用。就当记录一下。