Situation
当我们需要通过某一个构造函数来创建实例对象的时候,我们需要使用new关键字来创建这个实例对象,那么new关键字的背后究竟是什么?在使用new关键字的时候Js内部做了哪些事情?
Task
- 创建一个新的对象实例
- 让实例的原型链与其构造函数绑定
- 将构造函数的作用域指向实例
- 返回新创建的对象
Action
- 创建一个空的对象
- 将这个空对象的原型([[Prototype]])指向构造函数的原型对象(prototype)
- 将空对象的constructor属性赋值为构造函数
- 调用构造函数
- 若构造函数写了返回值则返回该值,否则返回这个新建的对象
Result
创建了一个原型指向new关键字后面的构造函数的实例对象,该对象继承了构造函数的属性和方法且可以访问原型链上所有的属性与方法