繁体   English   中英

私有变量的javascript getter

[英]javascript getter on private variables

我正在尝试在以下方面创建吸气剂:

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

但是,使用上面的代码,我无法实现这一目标..有人可以帮忙..

您需要的是一个通用的获取器/设置器,它能够更改value对象的任何属性。

不幸的是,当前版本的ECMAScript无法做到这一点,您将不得不等待ECMAScript 6应该提供的代理 (并且在最后的壁虎中提供)。

有关直接代理,请参见ES6 Wiki

同时,可能存在针对您的实际问题的JavaScript当前状态的解决方案。

您实际上可以在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM