用于对象访问器的Getter

时间:2014-09-29 15:29:09

标签: javascript

我需要使用observe方法访问cath动态对象访问器和返回对象。

示例:

var storage = {};

storage.foo.foo2.$observe(function(value){
    console.log('value:', value);
});

storage.foo.foo2.$set('some value');

Accesor键可能是可变的,例如' storage.user.name'或者' storage.book.owners'。嵌套深度可能是变化的。它不应该在对象中创建一个值,而应该创建一个带有方法的对象$ observe和$ set以及用于存储当前值的隐藏变量。

可能吗?

1 个答案:

答案 0 :(得分:1)

当然,如果您事先知道要监视的属性,以及它们所属的对象是否已存在,那么您可以这样做:

Object.defineProperty(storage.foo, 'foo2', {
    get: function() { return this._value; },
    set: function(v) { console.log(v); this._value = v; }
});

然后

storage.foo.foo2 = 'some value';

将触发setter和console消息,

storage.foo.foo2

将通过getter检索设定值。

如果知道该属性的名称,并且想要观看任何属性或类似内容,则必须等待ES6代理,或者您可以尝试FF在https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Proxy描述的实施。