隐式绑定只看最后一层调用对象,如obj.a.b.method()中this指向b而非obj或a;链式调用不改变绑定规则,但赋值后调用(如fn=obj.a.b.method;fn())会导致this丢失。

隐式绑定只看“最后一层调用对象”
链式调用如 obj.a.b.method() 中,this 不会指向 obj 或 a,而是严格绑定到 b —— 因为只有 b.method() 是实际触发函数执行的调用点。前面的 obj.a. 仅用于属性查找,不参与 this 绑定。
嵌套对象里 this 指向取决于调用主体,而非属性路径
即使 b 是从 obj.a 得来的,只要最终是 b.method() 被执行,this 就是 b。例如:
const b = obj.a.b;
b.method(); // this → b,不是 obj 或 a
如果 b 自身没有 name 属性,而 method 内访问 this.name,结果就是 undefined(不会向上自动查找 a.name 或 obj.name)。
链式调用中常见误解:this 不会“穿透”多层对象
- 写法 obj.a.b.method() ≠ this 指向 obj
- 写法 obj['a']['b'].method() 同样只绑定到 b,因为方括号只是另一种属性访问语法,不影响隐式绑定逻辑
- 哪怕 b 是个空对象 {},只要它是调用主体,this 就是它
链式调用本身不改变绑定规则,但容易引发隐式丢失
真正危险的是把链式结果赋值后再调用,比如:
const fn = obj.a.b.method;
fn(); // this 失去绑定,回退默认绑定(window 或 undefined)
这种写法切断了“对象.方法”的调用关系,无论原路径多长,一旦脱离直接调用形式,隐式绑定就失效。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











