对象字面量中箭头函数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
相关产品推荐
相关产品推荐

