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

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

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

我来评几句
登录后评论

已发表评论数()

相关站点

热门文章