为什么Proxy要结合Reflect
Proxy代理对象
let person = { name: "zf", get aliasName() { //属性访问器 return this.name + "jg"; }, };
使用 Proxy 代理
const proxy = new Proxy(person, { get(target, key, receiver) { console.log("这里可以记录这个属性使用了哪个effect"); return target[key]; }, set(target, key, value, receiver) { console.log("这里可以通知effect重新执行"); target[key] = value; return true; }, });
- 当使用 proxy.aliasName 时,会触发 get 拦截,但不会触发 this.name 的 get 拦截
- 使用 Relect 来修改 this 从而改变拦截
let person = { name: "zf", get aliasName() { //属性访问器 return this.name + "jg"; }, }; const proxy = new Proxy(person, { get(target, key, receiver) { console.log("这里可以记录这个属性使用了哪个effect"); return Reflect.get(target, key, receiver); }, set(target, key, value, receiver) { console.log("这里可以通知effect重新执行"); return Reflect.set(target, key, value, receiver); }, }); proxy.aliasName;

浙公网安备 33010602011771号