let a = 0; class deep { constructor() { this.proxy = new Proxy({ a }, { get: (obj, prop, value) => { const data = Reflect.get(obj, prop, value) return data }, set: (obj, prop, value) => { const oldValue = Reflect.get(obj, prop, value) let result = true; if (oldValue !== value) { result = Reflect.set(obj, prop, value) this.load(this.callback); } //返回布尔类型 return result } }) } load(callback) { callback(this.proxy.a); } } const obj = new deep(); obj.callback = (value) => { console.log(`a 的值已经更新为 ${value}`); } // 修改 a 的值,触发回调 obj.proxy.a = 1; 优化下上面代码
时间: 2024-02-21 16:58:00 浏览: 156
iter_iter_string.rar_class A
可以进一步优化上面的代码,使用箭头函数和简化的 `Proxy` 对象初始化方式,代码如下:
```javascript
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;
```
在这个优化版本中,我们将 `Deep` 类的构造函数重构为一个接受回调函数作为参数的函数。我们还使用箭头函数来简化 `Proxy` 对象的 `get` 和 `set` 处理函数,并且将 `Reflect` 对象的方法调用直接嵌入其中,去除了多余的代码。
阅读全文