let a = 0; class Deep { constructor(callback) { this.proxy = new Proxy({ a }, { get: (obj, prop) => Reflect.get(obj, prop), set: (obj, prop, value) => { const oldValue = Reflect.get(obj, prop); if (oldValue !== value) { Reflect.set(obj, prop, value); this.load(callback); } return true; }, }); } load(callback) { callback(this.proxy.a); } } const obj = new Deep((value) => { console.log(`a 的值已经更新为 ${value}`); }); // 修改 a 的值,触发回调 obj.proxy.a = 1;优化下上面代码,要求constructor后的参数为空
时间: 2024-01-19 07:04:22 浏览: 62
iter_iter_string.rar_class A
可以将回调函数作为类的一个方法,这样就不需要在构造函数中传入回调函数了。同时,可以使用箭头函数来避免 this 指向问题。优化后的代码如下:
```
let a = 0;
class Deep {
constructor() {
this.proxy = new Proxy({ a }, {
get: (obj, prop) => Reflect.get(obj, prop),
set: (obj, prop, value) => {
const oldValue = Reflect.get(obj, prop);
if (oldValue !== value) {
Reflect.set(obj, prop, value);
this.load();
}
return true;
},
});
}
load = () => {
console.log(`a 的值已经更新为 ${this.proxy.a}`);
};
}
const obj = new Deep();
// 修改 a 的值,触发回调
obj.proxy.a = 1;
```
阅读全文