new绑定优先级最高,函数被new调用时this必指向新实例,覆盖bind、隐式及默认绑定;箭头函数不可new调用。

new 绑定是 this 所有绑定规则中优先级最高的,只要函数被 new 调用,无论它是否已被 bind 过、是否作为对象方法存在,this 都会指向新创建的实例对象。
new 绑定的本质过程
new 操作符执行时内部完成四步:创建空对象 → 将该对象原型链接到构造函数的 prototype → 把 this 绑定到这个新对象并执行构造函数体 → 返回该对象(除非显式返回非空对象)。其中第三步直接锁定 this 值,覆盖其他所有绑定。
- 哪怕函数已用 bind 固定了 this,new 调用仍会让 this 指向新实例,而非 bind 指定的对象
- 哪怕函数是 obj.method 形式定义的,一旦用 new 调用(如 new obj.method()),this 就不再指向 obj,而是新实例
- 箭头函数不能被 new 调用,会直接报错;它没有 [[Construct]] 内部方法,也不参与 new 绑定
常见误判场景
开发者容易误以为“函数写在哪”或“怎么定义的”会影响 this,但 new 绑定只看“怎么调”。以下情况都触发 new 绑定:
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- new Foo() —— 标准构造调用,this 是新实例
- const Bound = Foo.bind(obj); new Bound() —— 硬绑定函数仍可被 new,this 指向新实例(obj.a 不会被修改)
- new (someObj.getConstructor())() —— 只要最终调用形式是 new + 函数,就走 new 绑定
与其它绑定的优先级关系
new 绑定在四条规则中稳居第一,它能覆盖其余所有规则:
- 高于显式绑定:call/apply/bind 指定的 this 在 new 调用时被无视
- 高于隐式绑定:obj.fn() 中的 obj 对 this 无影响,new fn() 就不认点左边是谁
- 高于默认绑定:独立调用本该指向 window 或 undefined,但加了 new 就完全绕过默认逻辑
实际调试建议
判断 this 是否被 new 绑定,只需问一个关键问题:“这个函数调用前面有没有 new?”
- 有 —— this 必为新实例,无需再看是否 bind、是否挂载在对象上
- 没有 —— 才进入显式→隐式→默认的逐级判断流程
- 不确定是否被 new?可在构造函数内打印 console.log(this instanceof Foo),返回 true 即确认 new 生效










