创建对象,其中每个属性和子属性只能写一次

时间:2017-07-22 05:44:53

标签: javascript node.js proxy immutability immutable.js

有没有办法用Javascript创建一个对象,其中对象上的每个属性只能写一次,而且在第一次写入后不可修改?

我所能做的只是一个代理对象,它具有赋值挂钩,〜像这样的东西:

var p = new Proxy({}, {
    set: function(target, property, value, receiver){
      Object.defineProperty(target, property, {
           value: value,
           writable: false
       })
    }
});

但代理使用起来很昂贵,并且在我需要支持的所有JS引擎中都不可用。有没有使用代理服务器来实现这个目标?

这适用于图书馆。我希望代表用户做不变性工作,并通过使用不变性来防止用户陷入某些陷阱。

我想创建一个不可变对象,但我希望该对象是可扩展的。但是,对象的任何扩展,我想成为一个不可变的属性。

注意: Object.freeze()不允许对象在事实之后可扩展,这对我的用例不起作用。

以下是一个例子:

let foo = {bar: 3};
foo.bar = 2; // should fail

foo.x = 1; // ok
foo.x = 2; // should fail

foo.y = {}; // ok
foo.y.z = 5; // ok
foo.y.z = 3; // should fail

0 个答案:

没有答案