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

对象字面量中箭头函数this绑定:仅改调用方式可行吗?

问题解答:箭头函数this无法通过调用方式修改的原因及结论

嗨,这个问题其实是箭头函数的核心特性导致的——仅通过修改调用方式,是没办法让这个箭头函数的this指向对象p的,下面给你详细拆解原因:

  • 箭头函数和普通函数的this绑定逻辑完全不同:普通函数的this是在调用时动态确定的,所以我们能通过call/bind/apply这类方法改变它的指向;但箭头函数本身没有独立的this,它的this是在定义时就捕获了外层作用域的this值,一旦固定就无法更改。
  • 回到你的代码场景:这个箭头函数是在全局作用域下定义的(对象字面量的创建过程不会形成独立作用域),所以它捕获的this就是全局的window对象。不管你用p.say.bind(p)()还是p.say.call(p)调用,这些方法都只能作用于有自身this的普通函数,对箭头函数完全无效。

如果一定要在不修改箭头函数本身的前提下拿到对象的name,可以绕个小弯(但这不算修改调用方式,只是补充思路):直接访问p.name,比如:

// 能输出目标name,但不是通过this访问
console.log(p.name);

但如果你的需求是必须通过this访问name,那唯一可行的方案还是把箭头函数改成普通函数,就像你已经了解的那样:

let p = { 
  name : 'Amir', 
  say: function() { 
    console.log(this.name) 
    console.log(this) 
  } 
}
p.say(); // 此时this指向p,正常输出'Amir'和p对象

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:09:43