简单来说就是:
- 不能添加新属性
- 不能删除已有属性
- 不能修改已有属性的值
- 不能修改原型
- 不能修改已有属性的可枚举性、可配置性、可写性
- 只能浅冻结,不能深冻结
通过Object.defineProperty的几个属性:
- configurable ,属性是否可配置。可配置的含义包括:是否可以删除属性(delete ),是否可以修改属性的 writable 、 enumerable 、configurable 属性。
- enumerable ,属性是否可枚举。可枚举的含义包括:是否可以通过for…in 遍历到,是否可以通过 Object.keys() 方法获取属性名称。
- writable ,属性是否可重写。可重写的含义包括:是否可以对属性进行重新赋值。
- value ,属性的默认值。
- set ,赋值。一旦属性被重新赋值,此方法被自动调用。
- get ,取值。一旦属性被访问读取,此方法被自动调用。
Object.definedProperty()方法可以定义对象的属性的特性。如可不可以删除、可不可以修改等等,通过Object.seal()方法可以实现不能删除,不能新增对象属性等等功能。
写法如下:
cconst _objectFreeze = object => {
// 补全代码
for (var key in object) {
Object.defineProperty(object, key, {
writable: false,
})
}
Object.seal(object)
}