为什么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;

 

posted @ 2022-06-25 11:25  霸哥yyds  阅读(118)  评论(0)    收藏  举报