new操作符执行分四阶段:1.创建空对象;2.设置其[[prototype]]指向构造函数prototype;3.以该对象为this执行构造函数;4.若构造函数返回引用类型则返回它,否则返回新对象。

1. 创建一个空对象
JavaScript 引擎内部生成一个全新的普通对象(等价于 Object.create(null) 或 {}),此时它没有任何自有属性,__proto__ 也尚未设置。
2. 设置原型链
将上一步创建的对象的 [[Prototype]](可通过 __proto__ 访问)指向构造函数的 prototype 属性。 例如:function Person() {},则新对象的 __proto__ === Person.prototype 为 true。
3. 绑定 this 并执行构造函数体
以该空对象为 this,调用构造函数(等效于 constructor.call(obj, ...args))。 函数体内对 this 的所有操作(如 this.name = 'Alice')都作用于这个新对象。
4. 决定最终返回值
检查构造函数的返回值:
- 如果返回值是引用类型(对象、数组、函数、正则、日期等),则 new 表达式直接返回该值,新对象被丢弃;
- 如果返回值是原始类型(string/number/boolean/null/undefined)或无返回,则忽略返回值,返回第一步创建的新对象。











