JS中的 new 关键字做了什么?

new 运算符 创建 一个用户定义的 对象类型 的实例或 具有构造函数的内置对象 的实例。

完整的了解 new 运算符你可能还需要了解一下 面向对象思想 以及 原型链,可以简单查看这篇笔记 👉 原型链! __proto__ 与 prototype

如果快速的了解 new 关键字按照MDN的文档描述来说就是:

  1. new关键字会创建一个空的简单JavaScript对象(即 {});
  2. 链接该对象(设置该对象的 constructor)到另一个对象 (绑定原型);
  3. 步骤1 新创建的对象作为 this 的上下文 ;
  4. 如果该函数没有返回对象,则返回 this

可以简单理解成 new 关键字帮我们处理了书写构造函数时一些固定的步骤

  • 创建临时对象;
  • 绑定原型;
  • return 这个临时对象

整个遍写构造函数的过程中,可以省略上面的步骤,直接使用 this 就可以指向这个临时对象,为他创建属性,
直接为 prototype 赋值属性和方法就可以对公共(对象原型)增加属性、方法。

未完成


尾声

ES6 为 new 引入了一个 new.target 属性,可以用来确定构造函数是怎么调用的。

new 运算符 - JavaScript | MDN
Object.prototype.constructor - JavaScript | MDN
JS 的 new 到底是干什么的? - 知乎
§ 6.new.target 属性 - Class 的基本语法 - ECMAScript 6入门