new绑定是javascript中this优先级最高的规则,其执行四步:创建空对象、设置原型链、以新对象为this执行构造函数、按返回值决定最终实例;箭头函数不可被new调用。

当使用 new 调用函数时,JavaScript 会自动创建一个新对象,并将该对象绑定为函数内部的 this,这是 new 绑定机制的核心。
new 绑定的四步执行过程
构造函数调用(new Fn())不是普通调用,而是触发引擎执行一套固定流程:
- 创建一个全新的空对象(即实例对象)
- 将该对象的
[[Prototype]]指向构造函数的prototype属性 - 以这个新对象为
this,执行构造函数体内的代码 - 若构造函数显式返回一个非空对象,则返回该对象;否则默认返回新创建的对象
new 绑定时 this 的确定性
在构造函数体内,this 始终指向新创建的实例对象,不受外部调用方式影响。即使函数本身被赋值给其他变量或作为回调传入,只要用 new 调用,this 就不会被其他绑定规则覆盖。
例如:
function Person(name) {
this.name = name;
}
const create = Person;
const p = new create('Alice'); // this 仍指向新对象,不是全局或 undefined
与其它 this 绑定规则的优先级关系
new 绑定是 JavaScript 中 this 绑定优先级最高的规则之一,高于显式绑定(call/apply/bind)和隐式绑定(对象方法调用),也高于默认绑定。
注意:如果用 new 调用一个已被 bind 过的函数,bind 提前设定的 this 会被忽略,new 绑定生效。
例如:
function Foo() { return this; }
const bound = Foo.bind({x: 1});
const inst = new bound(); // inst 是新对象,不是 {x: 1}
箭头函数不参与 new 绑定
箭头函数没有自己的 this,也不具备 prototype 属性,因此不能用 new 调用,否则会抛出 TypeError。
试图对箭头函数使用 new 时,引擎会直接报错,因为它不具备构造函数的基本特征(如可被实例化、拥有 prototype 等)。
常见错误写法:
const Arrow = () => {};
new Arrow(); // TypeError: Arrow is not a constructorJava免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











