修改JS对象的现有属性的可写性/可读性

时间:2016-05-23 08:41:46

标签: javascript node.js

我想知道是否有办法修改JS中对象的现有属性,以便我们可以在赋值后使它们不可变。

基本上,我有一个对象,我想冻结对象的现有属性,但允许添加新属性。

是否可以冻结现有属性,或者我是否需要像这样使用Object.defineProperty:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/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相同。

1 个答案:

答案 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]);
}

我只是用于一个属性,但你可以迭代所有对象属性