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创建不可变的对象的主要内容,如果未能解决你的问题,请参考以下文章