当我们使用 new 关键字调用一个函数时,JavaScript 引擎在底层偷偷执行了4个步骤。理解了这 4 步,你就彻底打通了原型和原型链的任督二脉:

  1. 创造肉身: 在内存中创建一个全新的、空的对象(比如叫 obj = {})。
  2. 注入灵魂(连接原型链): 将这个新对象 obj 的内部属性 __proto__,指向构造函数的 prototype 属性
  3. 赋予特质(绑定 this 并执行): 将构造函数内部的 this 绑定到这个新对象 obj 上,然后执行构造函数里的代码(比如 this.name = 'xxx',这就把属性挂载到了新对象上)。
  4. 诞生(返回对象): 检查构造函数有没有显式返回一个对象。如果没有(或者返回的是基本类型),就默认把刚才那个 obj 返回出去。