我正在尝试使用以下内容创建一个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
但是我无法使用上面的代码实现这一点。有人可以帮助..
答案 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