JS 的 new 做了什么

108 阅读1分钟

使用 new调用构造函数时。会依次执行下面的操作:

1、创建一个新对象;

2、构造函数的prototype会被赋值给这个新对象的__proto__;

3、将新对象赋值给当前的 this;

4、执行构造函数;

5、如果函数没有返回其他对象,那么new表达式中的函数调用会自动返回这个新对象,如果返回的不是对象将会被忽略。

  • 创建一个全新的对象obj,继承构造函数的原型:这个对象的__proto__要指向构造函数的原型prototype
  • 执行构造函数,使用 call/apply 改变 this 的指向(将obj作为this);
  • 返回值为object类型则作为new方法的返回值返回,否则返回上述全新对象obj

总之,创建新对象->绑定原型-> 指定this=新对象 -> 执行构造函数 -> 返回新对象 。