箭头函数中的this关键字如何确定其指向?

箭头函数没有自己的this,它继承了上层作用域的this。如果在全局作用域中定义箭头函数,那么它的this指向全局对象(在浏览器中是window)。箭头函数的this指向是词法作用域决定的,与调用方式无关。

箭头函数的this指向详解:

箭头函数中的this关键字如何确定其指向?
(图片来源网络,侵删)

1、普通函数的this指向:

在全局作用域中,this指向全局对象(浏览器环境中是window)。

在对象方法中,this指向调用该方法的对象。

在构造函数中,this指向新创建的实例对象。

在事件处理函数中,this指向触发该事件的元素。

箭头函数中的this关键字如何确定其指向?
(图片来源网络,侵删)

使用call、apply或bind方法时,this指向传入的第一个参数。

2、箭头函数的this指向:

箭头函数没有自己的this,它会捕获其所在上下文的this值作为自己的this值。

箭头函数内部的this值是在定义时确定的,而不是在运行时确定。

箭头函数不能用作构造函数,因为它没有prototype属性。

箭头函数中的this关键字如何确定其指向?
(图片来源网络,侵删)

示例代码:

function Person() {
  this.age = 0;
  setInterval(() => {
    // 由于箭头函数没有自己的this,所以这里的this指向Person实例对象
    this.age++;
  }, 1000);
}
var p = new Person();

相关问题与解答:

问题1:如何理解箭头函数没有自己的this?

答案:箭头函数没有自己的this,它捕获其所在上下文的this值作为自己的this值,这意味着当你在一个对象的方法中使用箭头函数时,这个箭头函数内部的this仍然指向外部的对象。

问题2:为什么箭头函数不能用作构造函数?

答案:箭头函数没有prototype属性,因此不能用作构造函数,构造函数需要有一个prototype属性来定义其实例对象的原型链,由于箭头函数没有prototype属性,所以不能用来创建新的实例对象。