2012-04-07 112 views
2

我有一個Foo構造是這樣的:如何在Javascript中處理錯誤的構造函數參數?

function Foo(params) { 
    this.x = params.x + 5; 
    ... 
} 

Foo被稱爲像這樣:

var foo = new Foo(someObject); 

我想檢查的params的內容Foo的構造函數,如果事情是錯的(例如,params.x不是數字,或者params.yundefined),我希望foonull(這將意味着Foo對象未被創建)。

我想一個選擇是在構造函數中拋出一個異常,並將new Foo(someObject)的調用換成try..catch(或者創建一個像makeFoo這樣的函數)。

你會建議如何處理這個問題?

+1

[如果javascript構造函數返回失敗,應該返回什麼](http://stackoverflow.com/questions/5149619/what-should-a-javascript-constructor-return-if-it-fails) – 2012-04-07 12:17:22

回答

4

我會拋出異常。無效輸入是一種特殊情況,拋出異常是有道理的。我不打擾makeFoo包裝;調用代碼應該處理它。


重新

我想foonull(這將意味着Foo對象沒有被創建)。

沒有辦法使表達式new Foo(...)返回null。通常,new表達式的結果是對由new運算符構造的對象的引用,並作爲this傳遞給構造函數。構造函數可以重寫並返回一個不同的對象,但它不能這樣做返回null。如果構造函數沒有返回任何東西,或返回的東西不是對象(不包括null; null不是一個對象[它有它自己的類型,Null],儘管typeof null"object"), new表達式的結果將是由new運算符創建的對象。更多內容請參閱11.2.213.2.2