2014-03-03 46 views
0

我有一個將jQuery對象作爲參數的自定義對象。如果傳遞一個無效的數據類型,處理停止實例化對象的最佳方法是什麼?當條件不符合時停止javascript中的對象實例化

var MyObj = function($obj) { 

    if(! ($obj instanceof jQuery)) 
     return false // This is where it should cancel or error or something 

} 

var myInstance = new MyObj('invalid'); 

回答

1

我想告訴大家,什麼是錯的用戶的最佳方式是拋出一個新的錯誤這樣的:

throw new Error('Wrong object type'); 

但它確實取決於你的目標。

例如,當你傳遞無效參數給他的構造函數時,jQuery不會出錯,它只是返回一個空對象並繼續執行代碼。


看到Cal Markham answer後,我對你的問題有點困惑。

如果你正在尋找你的代碼爲什麼不起作用,只是評論和不適當的刪除該答案,因爲它確實回答了你當前的問題。

+0

不,不,你首先是對的。在我的例子中,我只是犯了一個愚蠢的小語法錯誤。在閱讀你和Tibos的迴應後,我認爲拋出一個錯誤是最合適的選擇。謝謝 :) – McShaman

0

你有的代碼可以很好地工作,只是instanceof的一個小的語法錯誤。它應該是

if(! ($obj instanceof jQuery))

1

處理異常情況的最佳方法取決於代碼的特定情況。在某些情況下,如果您有選擇權,您可以以一種並不令人意外的方式繼續執行。在其他情況下,當你不能返回一個有意義的對象時,你應該拋出一個錯誤。最好的指導原則是你的代碼不應該讓使用它的人感到驚訝。

的非令人驚訝的方式處理一個特殊情況的一個例子是jQuery的:

$('#myDiv').css('color', 'red'); 

假設沒有#myDiv,你可以拋出一個錯誤來提醒他試圖改變開發商不存在的元素的顏色。或者你可以默默地忽略它。 jQuery選擇了第二個選項,並以連貫的,非常意外的方式工作。

錯誤拋出錯誤的好處是開發人員在出現問題時需要較少的時間進行調試。缺點是代碼可能會更混亂。