修改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' }); zb = '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完全一样。

如何使用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]); } 

我只是用于一个属性,但你可以遍历所有的对象属性