2016-03-09 35 views

回答

5

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