2017-02-03 117 views
1

基於這些規格在MDN關於新的運營商是如何工作的:Javascript new operator * always * overrides return value?

由構造函數返回的對象成爲 的全新表達的結果。如果構造函數不顯式返回對象,則使用步驟1中創建的對象代替 。 (通常構造函數不返回值,但可以 選擇這樣做,如果他們想覆蓋正常的對象創建 過程。)

我帶領相信,新的運營商只覆蓋了迴歸如果沒有提供,則爲價值。然而,它似乎總是這樣做,你可以從來沒有重寫它。

例如

function test() { return 1; } 
new test() // returns {} and not 1 

有人可以給一個例子不是這種情況,比如他們指的是在文檔?

回答

3

只能用非原始值覆蓋結果。

隨着原始

function test() { this.bar = '42'; return 1; } 
 
console.log(new test()) // {}

隨着對象,而不原始

function test() { this.bar = '42'; return { foo: 'bar' }; } 
 
console.log(new test()) // { foo: 'bar' };

隨着陣列,沒有原語

function test() { this.bar = '42'; return [42]; } 
 
console.log(new test()) // [42];

相關問題