我最近阅读了MDN documentation on the new
operator,我对它的作用的简明描述感到震惊:
当执行代码new Foo (...)时,会发生以下情况:
- 创建一个新对象,继承自Foo.prototype。
- 使用指定的参数调用构造函数 Foo ,并将其绑定到新创建的对象。
new Foo
相当于new Foo()
,即如果未指定参数列表,则调用 Foo 没有参数。- 构造函数返回的对象成为整个新表达式的结果。如果构造函数不起作用 显式返回一个对象,使用在步骤1中创建的对象 代替。 (通常情况下,施工人员不会返回值,但他们可以 如果他们想要覆盖正常的对象创建,请选择这样做 过程。)
醇>
似乎这些东西都不是特权操作,所以是否可以用其他语言结构完全重新创建new
的动作?
请注意,我不算Reflect.construct
,因为它的定义是"就像新操作符一样充当函数"。
答案 0 :(得分:1)
这个函数几乎重新创建Reflect.construct
,因此new
(construct
的最后一个参数除外,它在使用{{1}时没有等价物运算符:
new