我想知道是否有办法修改JS中对象的现有属性,以便我们可以在赋值后使它们不可变。
基本上,我有一个对象,我想冻结对象的现有属性,但允许添加新属性。
是否可以冻结现有属性,或者我是否需要像这样使用Object.defineProperty:
我怀疑事后可以修改属性的权限,但我想知道是否有一些秘密技巧可以使用。
我相信Object.freeze会有点过分,因为我想稍后允许添加新属性。
正如您所看到的,在对象被冻结后,您似乎无法添加属性"
var z = Object.freeze({
a: 'c'
});
z.b = 'm';
console.log(z);

这样做的动机是我正在编写一个库,并希望防止/(抛出错误),如果使用该库的开发人员覆盖属于该库的现有属性。
关于这个主题,wth是Object.freeze和Object.seal之间的区别吗?
https://msdn.microsoft.com/en-us/library/ff806192(v=vs.94).aspx
当我看到Object.seal时,我就像是哦!这一定是我要找的,不,似乎与Object.freeze,lame相同。
答案 0 :(得分:1)
如何使用Object.defineProperty()并为所有现有属性设置权限?
例如: https://jsfiddle.net/Luo80szt/
var myCar = new Object();
myCar.make = "Ford";
myCar.model = "Mustang";
Object.defineProperty(myCar, "make", { writable : false });
myCar.make ="BMW";
myCar.model ="Ranchero";
myCar.color ="white";
for(var key in myCar) {
console.log(myCar[key]);
}
我只是用于一个属性,但你可以迭代所有对象属性