JS对象或属性的不变性

提到不变性,不得不提一个概念:

对象常量定义:结合可写性可配置性可以创建一个真正的常量属性(不可修改、重定义、删除)

不变性可划分为以下几个等级:

1)禁止扩展:Object.preventExtensions(...)

代码示例:

var myObject = {
             a:2
         };
         Object.preventExtensions(myObject);
         myObject.b = 3;
         console.log(myObject.b);//undefined

分析:这里可以看到,b属性创建失败

注意:在严格模式下,会抛出TypeError异常

2)密封:Object.seal(...),这个方法同时会调用 禁止扩展

注意:密封之后不能添加属性,也不能配置属性或删除现有属性,但可以修改属性的值

3)冻结:Object.freeze(...),同时调用密封,并将可读性设置为false

注意:#冻结是级别最高的不变性;

       #这个对象引用的其他对象是不受影响的,当然也可以通过遍历他的所有引用对象进行冻结,不过这样有可能会无意冻结其他共享对象

原文地址:https://www.cnblogs.com/wccc/p/6732919.html