常量对象

一、freeze

Object.freeze()方法可以冻结(浅冻结 )一个对象,冻结指的是不能向这个对象添加新的属性(增),不能修改其已有属性的值(改),不能删除已有属性(删),以及不能修改该对象已有属性的可枚举性、可配置性、可写性。该方法返回传递的对象,而不是创建一个被冻结的副本 。

1
2
3
4
5
6
7
8
// 浅冻结

let obj1 = Object.freeze({internal: {}});
obj1.internal.a = 'aValue';
obj1.freeze = 'freeze'; // 在严格模式,会抛出TypeErrors错误

obj1.internal.a; // 'aValue'
obj1.freeze; // undefined


注:通过Object.isFrozen(obj)可以判断对象是否被冻结

二、seal

Object.seal()方法封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。当前属性的值只要可写就可以改变。

注:不会影响从原型链上继承的属性。但 __proto__属性的值不能通过对象直接修改。


三、preventExtensions

Object.preventExtensions()方法让一个对象变的不可扩展,也就是永远不能再添加新的属性

注:Object.preventExtensions()仅阻止添加自身的属性。但属性仍然可以添加到对象原型 。