2
我在Promise
上讀this example。我意識到Error
構造函數沒有用new
運算符調用。爲什麼它的工作呢?沒有新操作員的錯誤
我在Promise
上讀this example。我意識到Error
構造函數沒有用new
運算符調用。爲什麼它的工作呢?沒有新操作員的錯誤
因爲the specification says構造函數應該檢查它是如何調用的,如果它不是用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;
}