2016-03-04 23 views
3

鑑於這種代碼:在JavaScript中,新操作符是否總是返回新語句中提及的同一類型的對象?

function foo(){ 
    return foo; 
} 
var bar = new foo(); 

console.log(bar instanceof foo); 

我希望可以將輸出爲 「真」。但是,這是「假」。

爲什麼bar對象不是foo類型的?

另一方面,如果我只是從foo返回一個數字(比如說2),那麼我的輸出結果爲true。

+0

幾乎是重複的? [JavaScript:'新'如何在內部工作](http://stackoverflow.com/q/6750880/218196) –

回答

7

當你從構造函數返回一個基元(比如2)時,返回值被忽略。由new創建的對象被返回,就像構造函數沒有返回語句一樣。如果您從構造函數返回對象,則返回對象(注意:函數是Javascript中的對象),無論該對象是否具有構造函數作爲其內部原型。

在你的情況下你正在返回一個函數;該函數是foo,但它不是foo的一個實例。

See new operator

+1

如果你'返回這個;'在'foo()'它變成真的 – depperm

+0

[相關規範鏈接]( http://es5.github.io/#x13.2.2)。 – zzzzBov

+0

我會很感激,如果有人可以編輯鏈接英寸我顯然忘了如何手動做,我在手機上;) – Paulpro

相關問題