2013-02-07 31 views
0

我遇到了相當煩人的問題。我無法捕捉函數內部引發的錯誤。說實話 - 如果不是這個事實,即使在JavaScript對象中拋出錯誤,我也不會太在意。JavaScript從函數或對象中捕獲異常

這裏的示例代碼:

http://jsfiddle.net/TxsHK/1/(需要Firebug的控制檯來測試該代碼)

function ViewError($CONTENT){ 
    this.content = $CONTENT; 

    return this.content; 
}; 


try{ 
    $(document).ready(function() { 
    //-------------- 
      throw ViewError('Test error'); 
    //-------------- 
    });//$(document).ready(function() { 
}catch (e) { 
    if (e instanceof ViewError) { 
     console.info(e.message); 
    } 
    else{ 
     console.warn(e.message); 
    } 
} 

給出了一個錯誤

TypeError: e is undefined 

爲什麼?函數(或對象)拋出的錯誤應該是完全可捕獲的。這就是try - catch塊的全部目的:從函數中捕獲異常。至少......所以它是用其他語言寫的。

任何人都可以解釋發生了什麼?如何從函數/對象中捕獲異常?

回答

2

您的「ViewError」函數不返回任何內容。你因此投擲undefined。 (編輯 —你的小提琴是從發佈代碼不同影響 - 不這樣做!)

的「ViewError」功能是被稱爲在我不認爲是正確的方式,給定的方式代碼被寫入。我想你想throw new ViewError("Test error");爲了確保一個新的對象被創建。

還有一個問題:您期望您能夠將該調用拋出的異常捕獲到$(document).ready(),但這不一定行得通。如果在代碼運行時文檔尚未準備好,那麼您將不會遇到例外情況,因爲該調用立即返回。當文檔準備就緒時,您傳入的函數將在稍後調用。

+0

哦......好的。乾杯。感謝您指出這些:)至於在'$(document).ready()'上使用'try' - 我只是用它作爲例子,因爲它是大腳本的一部分,其中'try'實際上在'$(文檔).ready()' - 但我沒有想過在外面使用它可能會成爲一個問題,所以非常感謝您指出這一點! – MarcinWolny