前端小白白啦 2023-01-08 20:22 采纳率: 37.1%
浏览 39
已结题

Proxy 里面set 方法里的this指向?

Proxy 里面set 方法里的this指向?

Proxy 里面set 方法里的this指向?

        const ob = {
            name: "lala",
        }

        const obProxy = new Proxy(ob, {
            set: function(target, key, newValue) {
                console.log('99999', this, this === obProxy);
                target[key] = newValue
            },
            get: function(target, key) {
                return target[key]
            }
        })
        obProxy.name = 123

img


this指向以及原因

  • 写回答

2条回答 默认 最新

  • m0_54204465 2023-01-08 20:40
    关注

    在 set 方法里,this 指向的是 obProxy。

    这是因为,当你调用 obProxy.name = 123 时,会触发 set 方法的执行,并且 set 方法的 this 关键字就指向 obProxy。

    如果你使用箭头函数来定义 set 方法,那么 this 关键字的指向就会变成定义时所在的作用域(在这个例子里是全局)。
    当你使用普通函数定义 set 方法时,this 指向的是 obProxy:

    const ob = {
      name: "lala",
    };
    const obProxy = new Proxy(ob, {
      set: function (target, key, newValue) {
        console.log("this:", this); // this: obProxy
        target[key] = newValue;
      },
      get: function (target, key) {
        return target[key];
      },
    });
    obProxy.name = 123;
    
    

    而当你使用箭头函数定义 set 方法时,this 指向的是定义时所在的作用域(在浏览器中就是 window 对象):

    
    const ob = {
      name: "lala",
    };
    const obProxy = new Proxy(ob, {
      set: (target, key, newValue) => {
        console.log("this:", this); // this: window
        target[key] = newValue;
      },
      get: (target, key) => {
        return target[key];
      },
    });
    obProxy.name = 123;
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月10日
  • 创建了问题 1月8日