js proxy实例调用valueOf或toString为何会执行handler中的get?

let a = new Proxy({},{
    i: 5,
    get: function() {
        console.log(1);
        return ()=> {
            console.log(2);
            return this.i;
        }
    }
});
a.valueOf(); //控制台依次输出1,2; a的值为5

执行a.i时调用get,打印1,返回一个箭头函数。可以理解
a.valueOf()为何会执行get函数返回的箭头函数。
求教!!

阅读 3.2k
2 个回答

这个与 valueof 没有关系,只能说 好巧

通过 get 拦截函数设置了返回的值,所以无论你写 a.valueof 或者 a.b 或者 a.c 还是其他都会返回那个箭头函数

正因为它是一个函数,并且有返回值,所以你调用的时候 () 返回值就是 5,你 a.b() a.c()等等都是一样的

对 Proxy 对象来说,a.b (任何"b")都会调用 get ,并且a.b 的结果,就是 get 的结果。(调用时,a, "b", {}(proxy target, new Proxy() 的第一个参数) 都会被作为参数传给 get, this 就是 proxy handler (new Proxy()的第二个参数))【参考

所以 a.valueOf 会调用 get ,其结果是 get 的返回的箭头函数。a.valueOf() 调用了这个箭头函数。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题