我需要使用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以及用于存储当前值的隐藏变量。
可能吗?
答案 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描述的实施。