ES6中箭头函数作为对象属性,this的指向问题

发布于 2022-09-07 16:54:36 字数 409 浏览 19 评论 0

看了阮大神ES6入门一书的时候,介绍箭头函数this

this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。

网上也有云

箭头函数的this绑定看的是this所在的函数定义在哪个对象下,绑定到哪个对象则this就指向哪个对象
const Person = {
        'sayHello': () => {console.log(this)}
            };
      Person.sayHello();

这里的this为什么指向window?为什么不是外部代码块的Person对象的this.

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

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

发布评论

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

评论(3

总以为 2022-09-14 16:54:36

你的代码等效为:

const func = () => {
  console.log(this);
};

const Person = {
  hello: func,
};

Person.hello();

那么自然就是 window 咯,声明函数的地方是 window 嘛。

不寐倦长更 2022-09-14 16:54:36

更新

const person = {
    sayHello: () => console.log(this)
}

const Person = function() {
    this.sayHello = () => console.log(this)
}

const pI = new person()
// 报错: person is not a constructor

const PI = new Person()
PI.sayHello() 

clipboard.png


你看看 Person:

clipboard.png

再看看 window:

clipboard.png

你不觉得这两个东西有哪里不太一样吗?

const Person = {
    // ...
}

这种形式,你只是定义了一个数据而不是对象,对象是要求有 constructor 构造器定义的。

夏有森光若流苏 2022-09-14 16:54:36

使用对象字面量的时候,不要在其定义的方法里使用箭头函数,这属于箭头函数的禁忌。另外,可以看下下面的代码执行:

var obj = {
  i: 10,
  b: () => console.log(this.i, this),
  c: function() {
    console.log( this.i, this)
  },
  d() {
    console.log( this.i, this)  
  }
}
obj.b(); 
obj.c();
obj.d(); 

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