没有新运算符时出错

han*_*s-t 2 javascript constructor

我读这个例子Promise.我意识到Error构造函数不是用new运算符调用的.那么为什么会起作用呢?

Que*_*tin 6

因为规范说构造函数应该检查它是如何被调用的,如果它没有被调用new它应该调用自己new并返回它.

Error构造函数是%Error%内部对象和全局对象的Error属性的初始值.当Error作为函数而不是构造函数调用时,它会创建并初始化一个新的Error对象.因此,函数调用Error(...)等效于具有相同参数的对象创建表达式new Error(...).

JS中的示例实现可能如下所示:

function MyC(foo, bar) {
  if (!(this instanceof MyC)) {
    return new MyC(foo, bar);
  }
  this.foo = foo;
  this.bar = bar;
}
Run Code Online (Sandbox Code Playgroud)