使用 new调用构造函数时。会依次执行下面的操作:
1、创建一个新对象;
2、构造函数的prototype会被赋值给这个新对象的__proto__;
3、将新对象赋值给当前的 this;
4、执行构造函数;
5、如果函数没有返回其他对象,那么new表达式中的函数调用会自动返回这个新对象,如果返回的不是对象将会被忽略。
- 创建一个全新的对象
obj,继承构造函数的原型:这个对象的__proto__要指向构造函数的原型prototype; - 执行构造函数,使用
call/apply改变this的指向(将obj作为this); - 返回值为
object类型则作为new方法的返回值返回,否则返回上述全新对象obj。
总之,创建新对象->绑定原型-> 指定this=新对象 -> 执行构造函数 -> 返回新对象 。