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

发布于 2022-09-12 00:06:14 字数 315 浏览 14 评论 0

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函数返回的箭头函数。
求教!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

┈┾☆殇 2022-09-19 00:06:14

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

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

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

流星番茄 2022-09-19 00:06:14

对 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() 调用了这个箭头函数。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文