私有变量的javascript getter

时间:2014-01-20 19:39:18

标签: javascript object

我正在尝试使用以下内容创建一个getter:

function Field(val){
    this.value = {};
}

Field.prototype = {
    get value(){
        return this._value;
    },
    set value(val){
        this._value = val;
    }
};

但我能够实现的是field.value

的吸气剂

我想实现这样的目标:

field.value.foo['20'] = 'some_value'; // ==> Setter
field.value.foo['20']; // 'some_value' ==> Getter

但是我无法使用上面的代码实现这一点。有人可以帮助..

2 个答案:

答案 0 :(得分:1)

你想要的是一个通用的getter / setter,能够改变你的value对象的任何属性。

不幸的是,对于当前版本的ECMAScript,这是不可能的,你必须等待proxies哪个应该可用于ECMAScript 6(并且可以在最后一个gecko中使用)。

请参阅ES6 wiki for direct proxies

与此同时,对于您真正的问题,可能会有针对当前JavaScript状态的解决方案。

答案 1 :(得分:0)

您可以在ES5中实际解决此问题。我在这里记录这个,供其他用户帮助从中获益..

function Foo() {
    this.__value__ = {};
    this.__value__['20'] = 'some_value';
};

Foo.prototype.__defineGetter__('foo', function() {
    return this.__value__;
});

function Field() {
    this.__value__ = new Foo();
};

Field.prototype.__defineGetter__('value', function() {
    return this.__value__;
});

现在,来测试一下..

var field = new Field();
var value = field.value.foo['20'];
console.log(value);

我已更新了JSFiddle here