javascript中this绑定优先级为:new绑定最高,其次显式绑定(call/apply/bind),最后隐式绑定;new调用时this总指向新实例,显式绑定覆盖隐式绑定,隐式绑定仅在无new和显式绑定时生效。

在JavaScript中,this 的绑定顺序确实遵循明确的优先级:使用 new 调用时最高,其次是 显式绑定(call、apply、bind),最后是 隐式绑定(如对象方法调用)。
new 绑定优先级最高
当函数通过 new 调用时,无论该函数是否被显式或隐式绑定过,this 都会指向新创建的实例对象。
- 即使对一个已用
bind绑定了 this 的函数再用new调用,原始bind的绑定也会被忽略 -
new创建的新对象会屏蔽所有外层的 this 绑定逻辑 - 例如:
const bound = foo.bind(obj); const inst = new bound();→ this 指向inst,不是obj
显式绑定覆盖隐式绑定
当函数被 call、apply 或 bind 显式指定 this 时,它会覆盖默认的隐式绑定(比如 obj.fn() 中的 obj)。
-
obj.fn.call(otherObj)→ this 是otherObj,不是obj -
const boundFn = obj.fn.bind(otherObj); boundFn();→ 同样是otherObj - 注意:箭头函数不支持显式绑定,它的 this 由词法作用域决定,无法被
call/apply/bind改变
隐式绑定是默认 fallback
只有当没有 new、也没有显式绑定时,JavaScript 才按调用位置推断 this,即“谁调用,this 就是谁”。
-
obj.method()→ this 是obj -
const fn = obj.method; fn();→ this 在非严格模式下是window(或globalThis),严格模式下是undefined - 嵌套调用如
(obj.obj2.method)()仍属隐式绑定,取最靠近的直接调用者(obj2)
理解这个优先级链,能帮你准确预判 this 指向,避免常见陷阱。实际编码中,优先用箭头函数处理回调,或用 bind / 箭头属性方式固化 this,比依赖隐式绑定更可靠。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











