对于任何变量或其属性,是否有办法知道何时设置其值?
例如,说我有:
let x = { 'a': 1, 'b': 2 };
// x.a's set operation is linked to a method
x.a = 3; // the method is automatically called
当a的值更改时,有没有一种方法可以调用函数?许多代码将更改此值。我不想到处都添加方法调用。
我知道代理,但要使用它们似乎需要一个单独的变量。意思是,x不能作为自身的代理。
最好是这种技术适用于原始的和非原始的。
答案 0 :(得分:3)
说实话,请使用Proxy
如果您真的不能使用Proxy,则可以使用setter和getters来实现。
尽管这确实意味着要重新声明原始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;
答案 1 :(得分:3)
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