2 回答
TA贡献1765条经验 获得超5个赞
x不能成为其自身的代理
当然可以。您只需执行以下操作即可将变量更改为指向代理
x = new Proxy(x, handler)
原始示例:
const handler = {
set: function(obj, prop, value) {
console.log('setting prop: ', prop, ' to ', value)
obj[prop] = value;
return true;
}
};
let x = { 'a': 1, 'b': 2 };
x = new Proxy(x, handler);
x.a = 3; // the method is automatically called
TA贡献1863条经验 获得超2个赞
老实说,如果可以的话,请使用Proxy
如果您真的不能使用Proxy,则可以使用setter和getter来实现
尽管这确实意味着要重新声明您的原始x对象,但我认为它像您的问题中的“最小,完整且可验证的示例”一样被内联声明了
let x = {
_a: 1,
_b: 2,
get a() {
return this._a;
},
get b() {
return this._b;
},
set a(value) {
console.log(`changing a from ${this._a} to ${value}`);
this._a = value;
},
set b(value) {
console.log(`changing b from ${this._b} to ${value}`);
this._b = value;
}
};
x.a = 3;
添加回答
举报