new绑定和原型初始化严格按序执行:先创建空对象并设置其__proto__指向constructor.prototype,再绑定this并执行构造函数;继承中super()必须首调,确保父类原型挂载后才执行父类构造逻辑。

new 绑定和原型对象的初始化不是并行或随意发生的,而是有严格先后顺序的:先建立原型链接,再绑定 this 并执行构造函数。
原型链必须在构造函数执行前就位
当 new Constructor() 被调用时,引擎第一步创建空对象,第二步立刻将其 __proto__ 指向 Constructor.prototype。这一步完成之后,新对象才具备通过原型链访问方法的能力。如果跳过这步,哪怕后续手动补上,构造函数里调用的 this.method() 仍会报错——因为执行时原型链尚未建立。
this 绑定发生在原型设置之后、构造函数体开始执行之前
引擎在设置完 __proto__ 后,立即以新对象为上下文调用构造函数(等价于 Constructor.call(newObj, ...args))。此时 this 已确定指向该对象,所有对 this.xxx = yyy 的赋值,都是直接写入这个实例本身,不干扰原型。
顺序错误会导致运行时异常
常见误区是认为“先执行构造函数,再连原型”。实际中若在构造函数里提前访问未定义的方法(比如 this.init()),而该方法只存在于 prototype 上,那只要原型链已正确设置,就能顺利查找到;反之,若原型未设好,就会得到 undefined is not a function。
继承场景下 super() 进一步强化了该顺序
- 子类构造函数中,super() 必须是第一句
- 它内部会先确保父类原型已挂载到当前实例(即子类实例的 __proto__ 实际指向的是子类 prototype,而子类 prototype 的 __proto__ 指向父类 prototype)
- 然后才执行父类构造函数逻辑,完成父类自有属性初始化
- 最后控制权交回子类,添加子类专属属性











