JavaScript中this绑定优先级顺序为:new绑定 > 显式绑定(call/apply/bind) > 隐式绑定(obj.method) > 默认绑定(独立调用)。引擎按此固定顺序判断,匹配即终止。
显式 > 隐式 > 默认)怎么梳理">
JavaScript 中 this 的绑定优先级不是凭空记忆的,而是由函数**如何被调用**决定的。四种绑定方式互斥,引擎按固定顺序判断:一旦匹配某条规则,就不再往下看。掌握这个逻辑,比死记“new > call > obj.method > fn()”更可靠。
new 绑定:构造函数调用优先级最高
当函数通过 new Foo() 方式调用时,无论函数内部是否用了 call 或定义在对象上,this 都指向新创建的实例对象。这是 JavaScript 引擎最先检查的规则。
- 触发条件:紧跟
new关键字,且函数名首字母大写只是约定,非强制 - 即使函数本身是通过
bind绑定过的,new仍会覆盖它(bind返回的函数被new调用时,原绑定失效) - 示例:
const bound = func.bind({x: 1}); new bound()→this是新实例,不是{x: 1}
显式绑定:call / apply / bind 明确指定 this
如果函数不是用 new 调用,但用了 .call()、.apply() 或 .bind(),那么 this 就取传入的第一个参数(即显式指定的对象)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
call和apply立即执行;bind返回一个永久绑定的新函数 - 注意:
bind可以多次调用,但只有第一次生效(后续bind不会改变已绑定的this) - 隐式绑定会被显式绑定覆盖:比如
obj.method.call(otherObj)→this是otherObj,不是obj
隐式绑定:对象方法调用形式
当函数作为对象的属性被调用,即形如 obj.fn() 或 obj.nested.fn() 时,this 指向调用链中**最靠近函数的那个对象**(也就是点号左边的对象)。
立即学习“Java免费学习笔记(深入)”;
- 只看调用时的语法结构,不看函数在哪定义、怎么赋值
- 常见陷阱:赋值后调用会丢失隐式绑定,例如
const f = obj.fn; f()→ 回退到默认绑定 - 嵌套对象中,
obj.a.b.method()的this是obj.a.b,不是obj或obj.a
默认绑定:兜底规则,独立调用函数
以上三条都不满足时,进入默认绑定:函数以纯粹“裸调用”方式执行,如 fn()、foo.bar.baz() 中的 baz 若不是对象方法,则也走这条。
- 非严格模式下:
this指向全局对象(浏览器是window,Node.js 是global) - 严格模式下:
this是undefined(不会自动装箱) - 模块顶层的
this在 Node.js 中指向module.exports,属于环境特例,不改变默认绑定逻辑

















