js创建不可变的对象

2021-02-11 16:20

阅读:505

标签:style   tar   obj   false   extension   code   battery   lan   注意   

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

  假如我们必须定义一个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创建不可变的对象

标签:style   tar   obj   false   extension   code   battery   lan   注意   

原文地址:https://www.cnblogs.com/x1aoguaishou/p/13038646.html


评论


亲,登录后才可以留言!