new绑定优先级最高,无论函数是否被bind或作为方法调用,只要用new调用,this必指向新实例;显式绑定仅在非new场景生效,且箭头函数不支持call/apply/bind。

new 绑定优先级高于显式绑定。
new 绑定总是胜出
只要函数被 new 调用,无论它是否已被 bind 过、是否在对象上作为方法存在、或是否被 call/apply 调用过,this 都会指向新创建的实例对象。
- new 操作内部会强制将 this 绑定到新对象,并跳过所有其他绑定逻辑
- 即使对一个已用
bind(obj)固定 this 的函数执行new boundFn(),最终 this 仍指向新实例,不是 obj - 构造函数若显式返回一个对象,则 this 绑定失效(但 new 绑定本身仍发生,只是返回值覆盖了 this 所在对象)
显式绑定只在非 new 场景下生效
call、apply、bind 的作用是手动指定 this,但它们的效力仅限于普通调用或方法调用场景。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
-
fn.call(obj)或fn.apply(obj)立即执行,this 为 obj —— 前提是没用 new -
const bound = fn.bind(obj)返回一个硬绑定函数,后续调用时 this 固定为 obj —— 除非用 new 调用它 - 箭头函数不参与显式绑定:call/apply/bind 对它无效,因为它没有自己的 this
优先级链不能跳过
JavaScript 的 this 绑定按固定顺序判断,不会“混合”或“叠加”:
立即学习“Java免费学习笔记(深入)”;
- 先看是否 new 调用 → 是,直接走 new 绑定
- 否则看是否 call/apply/bind → 是,走显式绑定
- 再看是否对象.方法() → 是,走隐式绑定
- 最后才是默认绑定(严格模式为 undefined,非严格为全局对象)
常见误判点
容易以为 bind 后的函数“永远绑定 this”,其实它只是“永久绑定”,不是“绝对绑定”。
-
const f = foo.bind({x:1}); f();→ this 是 {x:1} -
const f = foo.bind({x:1}); new f();→ this 是新实例,{x:1} 被忽略 -
obj.method.call(other);→ this 是 other,不是 obj(显式覆盖隐式)

















