new 调用函数时,该函数将被用作构造函数
类只能用 new 运算符实例化
不使用 new 调用一个类将抛出 TypeError。
过程
new Foo(...) 执行时:
-
创建一个空的简单 JavaScript 对象。
为方便起见,我们称之为
newInstance
。 -
如果构造函数的 prototype 属性是一个对象,则将
newInstance
的[[Prototype]]
指向构造函数的这个属性;否则
newInstance
将保持为一个普通对象,其[[Prototype]]
为Object.prototype
。备注:通过构造函数创建的所有实例都可以访问添加到构造函数 prototype 属性中的属性/对象。
-
使用给定参数执行构造函数,并将
newInstance
绑定为this
的上下文,在构造函数中的所有 this 引用都指向 newInstance。
-
如果构造函数返回 引用类型,则该返回值作为 new 表达式的结果。
否则返回构建好的
newInstance
。