最近,我读了MDN documentation on the new
operator,我被它用来做什么的简洁描述来袭:是否有可能在JS中重新创建“新”运算符?
当执行代码新富(...),下面的事情发生:
- 创建一个新对象,继承自Foo.prototype。
- 构造函数Foo被调用指定的参数,并绑定到新创建的对象。
new Foo
相当于new Foo()
,即如果没有指定参数列表,Foo被称为 没有参数。- 构造函数返回的对象成为整个新表达式的结果。如果构造函数不显式返回对象,则使用步骤1中创建的对象代替 。 (通常构造函数不返回值,但可以 选择这样做,如果他们想覆盖正常的对象创建 过程。)
好像没有这些东西都是特权操作,那么是否有可能用其他语言结构完全重新创建new
的动作?
请注意,我不计数Reflect.construct
,因为它的定义是“它像新函数一样起作用”。
公告自ES6以来,你必须使用'Reflect.construct',上面的描述来自ES5,一些内建函数和使用'class'语法*定义的构造函数区分被调用为构造函数和被调用的方法 – Bergi