隐式绑定的this指向函数调用时“点号左边”的直接调用对象,如person.getname()中this为person;赋值或传参后调用会丢失绑定;嵌套对象只认最近调用者;优先级低于显式绑定和new绑定。

JavaScript 中隐式绑定的 this 指向,取决于函数**被谁调用(即调用位置)**,而不是定义位置。核心规则是:当函数作为对象的属性被直接调用时,this 指向该对象。
看函数调用时的“点前面是谁”
这是判断隐式绑定最直观的方法。只要函数是以 obj.method() 形式调用的,this 就指向点号(.)左边的那个对象。
-
person.getName()→this是person -
obj.fn()→this是obj -
arr.push(1)→this是arr(数组也是对象)
注意:隐式绑定只看“直接调用”,不看赋值或中间变量
即使把方法赋给另一个变量,再调用,也会丢失隐式绑定——因为调用形式不再是 obj.method(),而是独立的 fn()。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
const fn = person.getName; fn();→this是undefined(严格模式)或全局对象(非严格模式) -
setTimeout(person.getName, 100);→ 同样丢失绑定,this不是person - 本质:赋值或传参过程只是传递函数引用,不保留调用上下文
嵌套对象中,只看“最近一层”的调用者
隐式绑定不追溯原型链或外层对象,只认当前调用表达式中紧挨着函数名的那一个对象。
-
obj.inner.method()→this是inner,不是obj -
person.car.engine.start()→this是engine - 哪怕
engine是从car上取出来的,只要调用写成engine.start(),this就锁定为engine
隐式绑定会被显式绑定或 new 绑定覆盖
隐式绑定优先级最低。如果同时存在多种绑定方式,它会被更高优先级的规则覆盖:
-
obj.method.call(otherObj)→this是otherObj(call显式绑定优先) -
new obj.method()→this是新创建的实例(new绑定优先) - 箭头函数没有自己的
this,会沿作用域链向上找,不参与隐式绑定
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










