隐式绑定中this指向点号左侧直接调用方法的对象,而非定义位置或嵌套链起点;如obj.a.b.method()中this为b,解构或赋值后调用则丢失绑定。

隐式绑定在嵌套对象调用时,this 指向的不是最外层对象,而是点号左边直接调用该方法的那个对象。关键不在“函数定义在哪”,而在“谁在执行它”。
嵌套调用中 this 只认最后一层对象
JavaScript 引擎只看函数被调用时的「直接主语」。比如:
-
obj.a.b.method()→this指向b,不是a,更不是obj -
user.profile.settings.save()→this是settings对象 - 即使
settings是从profile上取出来的,只要调用写成settings.save(),this就绑定到settings
为什么嵌套路径不改变 this?
因为点号左侧的链式访问(如 obj.a.b)只是「求值过程」,最终传给函数执行的上下文,只取决于最后那个 . 左边的对象。引擎执行时会先计算出 obj.a.b 的值(即 settings),再以 settings.save() 的形式调用——所以隐式绑定生效对象是 settings。
容易误判的几种情况
-
const fn = obj.nested.method; fn();→this不再是nested,而是undefined(严格模式)或全局对象 -
setTimeout(obj.nested.method, 100);→ 定时器内部是独立调用,this丢失 -
const { method } = obj.nested; method();→ 解构后脱离原对象,this同样失效
如何验证当前 this 指向?
在方法内部加一句 console.log(this); 最直接。也可以临时用 Object.is(this, obj.nested) 判断是否绑定正确。注意:不要依赖代码缩进或变量名猜测,只盯住调用表达式中最靠近函数名的那个点左边是谁。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











