异
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