当代码 new Foo(...) 执行时,会发生以下事情:
Foo.prototype 的新对象。Foo,并将 this 绑定到新创建的对象。new 表达式的结果。new 表达式的结果是步骤 1 中创建的对象。我们可以把 new 的过程拆解为如下步骤:
{});__proto__,将该属性链接至构造函数的原型对象;this 的上下文;this。在面试中,手写 new 是一个非常高频的考点。我们可以通过编写一个 myNew 函数来模拟 new 运算符的行为。
__proto__ 需要指向构造函数的 prototype。this 指向:使用 apply 或 call 执行构造函数。new 的结果应该是这个返回的对象,而不是新创建的实例。如果返回原始值(undefined, null, number, boolean, string, symbol),则忽略,仍然返回新实例。