当我们使用 new 关键字调用一个函数时,JavaScript 引擎在底层偷偷执行了4个步骤。理解了这 4 步,你就彻底打通了原型和原型链的任督二脉:
- 创造肉身: 在内存中创建一个全新的、空的对象(比如叫
obj={})。 - 注入灵魂(连接原型链): 将这个新对象
obj的内部属性__proto__,指向构造函数的prototype属性 - 赋予特质(绑定
this并执行): 将构造函数内部的this绑定到这个新对象obj上,然后执行构造函数里的代码(比如this.name = 'xxx',这就把属性挂载到了新对象上)。 - 诞生(返回对象): 检查构造函数有没有显式返回一个对象。如果没有(或者返回的是基本类型),就默认把刚才那个
obj返回出去。