为什么箭头函数不会运行呢?

发布于 2022-09-12 03:34:10 字数 564 浏览 26 评论 0

求解大佬,先行感谢。
我在看阮一峰老师的ES6入门中super属性的时候有这么一个问题,先贴代码:

 const proto = {
     x: "hello",
     foo: function () {
         () => alert(this.x);
     },
 };

 const obj = {
     x: "world",
     foo() {
         super.foo();
     },
 };
 Object.setPrototypeOf(obj, proto);
 obj.foo();

碰到两个问题:

  1. 首先是为什么箭头函数不会运行呢?我在chrome里面调试会走到箭头函数那一步,但是不会出现警告框,改成console.log 也没用
  2. 我在chrome调试的时候发现箭头函数的this指向的是obj对象,但是箭头函数不是在定义的时候就已经把this绑定到了外层作用域吗?这时候this不是应该指向proto吗?

刚刚开始学ES6,基础不太好,非常感谢大佬能点拨一下,谢谢!

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

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

发布评论

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

评论(3

Oo萌小芽oO 2022-09-19 03:34:10
  1. 箭头函数也是函数,需要调用才能执行

    (() => alert(this.x))();
  2. 调用 super.foo 的时候才会创建箭头函数,此时外层作用域的 this 指向为 obj

可以试试把箭头函数直接定义在全局:

const foo = () => console.log(this);
const proto = {
    x: "hello",
    foo: function() {
        foo();
    }
};
// ...
obj.foo(); // 打印 window
安人多梦 2022-09-19 03:34:10
() => alert(this.x);

这个只是申明语法, 没有调用,自然不会运行

(() => alert(this.x))(); // 改成这样试试?
灵芸 2022-09-19 03:34:10

谁调用指向谁,() => alert(this.x); 你是在foo 中申明了 一个x

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