Javascript 没有新运算符时出错

Javascript 没有新运算符时出错,javascript,constructor,Javascript,Constructor,我正在读《承诺》。我意识到Error构造函数不是用new操作符调用的。那么它为什么工作呢?因为构造函数应该检查它是如何调用的,如果它不是用new调用的,它应该用new调用自己并返回它 错误构造函数是%Error%内在对象和全局对象的Error属性的初始值。当Error作为函数而不是构造函数调用时,它会创建并初始化一个新的Error对象。因此,函数调用错误(…)等价于具有相同参数的对象创建表达式new Error(…) JS中的示例实现可能如下所示: function MyC(foo, bar)

我正在读《承诺》。我意识到
Error
构造函数不是用
new
操作符调用的。那么它为什么工作呢?

因为构造函数应该检查它是如何调用的,如果它不是用
new
调用的,它应该用
new
调用自己并返回它

错误构造函数是%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;
}

从ES6中,我们可以使用
new.target
<代码>新建.target!==MyC