没有新运算符时出错

时间:2016-03-09 09:52:21

标签: javascript constructor

我正在Promise上阅读this example。我意识到Error构造函数不是用new运算符调用的。那么为什么会这样呢?

1 个答案:

答案 0 :(得分:6)

因为the specification says构造函数应该检查它是如何被调用的,并且如果它没有被new调用,它应该用new调用自己并返回它。 / p>

  

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;
}