我正在使用Object.defineProperty
覆盖对象上的getter和setter,以便我可以收听所有突变事件。
var a = {};
Object.defineProperty(a, key, {
get: function(){
..
},
set: function(val){
..
}
}
这很好用,但有一个警告-我需要提前知道我想听的属性-这意味着我需要在开始时要遍历所有要查看的键。
如果我想在运行时像这样随机分配新属性:
a.new_attr=1;
因为我还没有定义
new_attr
属性,所以它不起作用。有没有一种方法可以:
第一次分配属性时动态运行
Object.defineProperty()
;要么还有其他方法来处理这种情况吗? (也许可以通过某种方式监视所有属性而无需指定键)
最佳答案
我认为您真正想使用的是Proxy
。代理允许您拦截诸如get和set之类的事件。
var obj = {
a: 1,
b: 2
};
var proxiedObj = new Proxy(obj, {
get: function(target, name) {
console.log(`get: ${name}`);
return target[name];
},
set: function(target, prop, value) {
console.log(`set: ${prop}`);
target[prop] = value;
}
});
console.log(proxiedObj.a);
console.log(proxiedObj.b);
// Notice that it still works even on new properties
proxiedObj.c = 3;
console.log(proxiedObj.c);
关于javascript - 在新键上动态运行Object.defineProperty,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43590091/