You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JavaScript对象箭头函数简写方法中this关键字无法正确指向对象?

为什么对象中的箭头函数this不指向当前对象?

这是个非常典型的箭头函数认知误区,我来给你讲明白其中的关键~

首先得记住箭头函数的核心特性:箭头函数没有属于自己的this绑定,它的this是从定义它的外层作用域继承来的,而且一旦确定就不会改变——不管你用什么方式调用这个箭头函数,它的this都不会变。

回到你的代码来看:

let person = {
  name: 'Krishna',
  age: 35,
  sayHello() {
    return 'Hello, my name is ' + this.name;
  },
  sayHi: () => `Hi ${this.name}`
};

你可能以为对象字面量会形成一个独立的作用域,但实际上,对象的大括号{}并不会创建新的作用域。所以定义sayHi箭头函数的时候,它的外层作用域是全局作用域(在浏览器环境下就是window对象),因此这个箭头函数的this直接绑定了全局的window。

而普通函数sayHello的规则完全不同:普通函数的this是在调用时确定的——当你用person.sayHello()调用它时,this会自动绑定到调用它的对象person,所以this.name能正确取到'Krishna'。

当你调用person.sayHi()时,虽然是通过person对象调用,但箭头函数的this早已在定义时绑定为全局window,而全局window中没有name属性(除非你手动定义过),所以最终会输出Hi undefined。

如果想让方法的this指向person对象,最直接的方案就是用普通函数写法替代箭头函数:

let person = {
  name: 'Krishna',
  age: 35,
  sayHello() {
    return 'Hello, my name is ' + this.name;
  },
  sayHi() {
    return `Hi ${this.name}`;
  }
};

这样调用person.sayHi()时,this就会正确绑定到person对象,输出Hi Krishna。

内容的提问来源于stack exchange,提问作者kadina

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:08:37