js创建不可变的对象

Posted x1aoguaishou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js创建不可变的对象相关的知识,希望对你有一定的参考价值。

  对象的不变性象征着我们不想要对象在新建后以任意形式改变(将这些设置为只读类型)。

  假如我们必须定义一个car对象,并在整体项目中应用它的属性来完成操作。我们不能允许不正确地改变任意数值。

1 const myTesla = {
2 
3  maxSpeed: 155,
4 
5  batteryLife: 300,
6 
7  weight: 2300
8 
9 };

  Object.preventExtensions()阻止扩展

  此方法可阻止向当前对象增加新属性,preventExtensions()是不可逆的操作,我们始终不可以再向对象增加附加的属性。

1 Object.isExtensible(myTesla); // true
2 
3 Object.preventExtensions(myTesla);
4 
5 Object.isExtensible(myTesla); // false
6 
7 myTesla.color = ‘blue‘;
8 
9 console.log(myTesla.color) // undefined

  Object.seal()密封

  它可以阻止增加或删除属性,seal()还能够阻止改变属性描述符。

 1 Object.isSealed(myTesla); // false
 2 
 3 Object.seal(myTesla);
 4 
 5 Object.isSealed(myTesla); // true
 6 
 7  
 8 
 9 myTesla.color = ‘blue‘;
10 
11 console.log(myTesla.color); // undefined
12 
13  
14 
15 delete myTesla.batteryLife; // false
16 
17 console.log(myTesla.batteryLife); // 300
18 
19  
20 
21 Object.defineProperty(myTesla, ‘batteryLife‘); // TypeError: Cannot redefine property: batteryLife

 

  Object.freeze()冻结

  它的作用与Object.seal()一样,同时它使属性不可写。

 1 Object.isFrozen(myTesla); // false
 2 Object.freeze(myTesla);
 3 Object.isFrozen(myTesla); // true
 4  
 5 myTesla.color = ‘blue‘;
 6 console.log(myTesla.color); // undefined
 7  
 8 delete myTesla.batteryLife;
 9 console.log(myTesla.batteryLife); // 300
10  
11 Object.defineProperty(myTesla, ‘batteryLife‘); // TypeError: Cannot redefine property: batteryLife
12  
13 myTesla.batteryLife = 400;
14 console.log(myTesla.batteryLife); // 300

 

  注意:假如想要在测试改变不可变对象时抛出不正确,请应用严格模式。

 

延伸阅读:为企业带来客户的网站营销策略

以上是关于js创建不可变的对象的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段——JS中的面向对象编程

VSCode自定义代码片段9——JS中的面向对象编程

合理利用Java不可变对象,让你的代码更加优雅

java-并发-不可变对象

js 不可变的原始值和可变的对象引用

两个不可变列表 - 如何使三重相等起作用?