2014-07-19 106 views
1

如果我在構造函數中使用return語句,是不是它被認爲是一個實例?或者,return語句使它成爲一個常規函數?爲什麼原型未定義從構造函數返回?

function ClazzA() {}; 
ClazzA.prototype.go = 1; 

function ClazzB() { 
    return {}; 
}; 

ClazzB.prototype.go = 1; 

var a = new ClazzA(); 
var b = new ClazzB(); 

console.log(a.go); //1 
console.log(a.constructor); //ClazzA() 
console.log(a instanceof ClazzA); //true 
console.log(b.go); //undefined 
console.log(b.constructor); //Object() 
console.log(b instanceof ClazzB); //false 
+1

您從構造函數返回空對象。如果您返回數字或字符串,則按預期工作。請參閱https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/new解釋,如果構造函數返回新對象會發生什麼 –

+0

@YHarry請不要在後續編輯中拖動問題,在你的問題中提出問題。您可以在答案中的評論中要求澄清,但如果他們想要提供任何進一步幫助或需要自行解決問題,則由該人員決定。 – Sumurai8

+0

明白了!謝謝〜 – YHarry

回答

2

這就是new運算符在JavaScript中的工作原理。如果構造函數返回一個對象引用,那麼這就是new表達式的值。你的構造函數創建並返回一個空的(普通)對象,所以這就是分配給變量「b」的東西。

相關問題