我可以使用ES6代理观察对象,获取和设置属性等? 例如:使用ES6代理观察对象
var obj = {a: 1; b: 2};
obj.a = 3; // I need to catch this setting, like a Object.watch() in Firefox
我可以使用ES6代理观察对象,获取和设置属性等? 例如:使用ES6代理观察对象
var obj = {a: 1; b: 2};
obj.a = 3; // I need to catch this setting, like a Object.watch() in Firefox
是的,这是他们在做什么的一部分。您正在寻找的陷阱称为set
:
let obj = {a: 1, b: 2};
let p = new Proxy(obj, {
set(target, name, value) {
console.log("set " + name + " to " + value);
target[name] = value;
}
});
p.a = 3;
是的,但这并不负责设置值'obj.a'直。 –
@KesantieluDasefern:不,当然不是。为了处理这一点,你不得不修改'obj'(例如,安装的getter/setter组合),这将是财产特定的。 AFAIK,没有类似Object.watch的功能的计划;性能对效用的影响太大了。 –
其实Object.observe计划在ES7,但他们决定支持代理服务器来代替。 – inf3rno
为什么不使用对象的getter/setter方法?
let ourObj = {
get a(){
return this._a;
}
set a(val){
console.log(val);
this._a = val
}
}
那么在现有的属性上使用getters/setter呢? –
Object.defineProperty可以解决这个问题。 – vgoreiko
当然可以。您可以了解在MDN代理:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy –