我正在Promise
上阅读this example。我意识到Error
构造函数不是用new
运算符调用的。那么为什么会这样呢?
答案 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;
}