文章目錄
- Microsoft AJAX Library擴充了Error的一些靜態方法,用來建立特定的錯誤:
- Error對象的屬性:
- Error.create 函數
- Error.popStackFrame 函數
Error是一個內建的JS對象,其包含了JS在運行時的錯誤資訊。當拋出Error資訊時,可以通過try{}catch(e){}捕獲。
Microsoft AJAX Library擴充了Error的一些靜態方法,用來建立特定的錯誤:
Error.argument 函數
建立一個表示 Sys.ArgumentException 異常的 Error 對象。
Error.argumentNull 函數
建立一個表示 Sys.ArgumentNullException 異常的 Error 對象。
Error.argumentOutOfRange 函數
建立一個表示 Sys.ArgumentOutOfRangeException 異常的 Error 對象。
Error.argumentType 函數
建立一個表示 Sys.ArgumentTypeException 異常的 Error 對象。
Error.argumentUndefined 函數
建立一個表示 Sys.ArgumentUndefinedException 異常的 Error 對象。
Error.invalidOperation 函數
建立一個 Error 對象,該對象表示 Sys.InvalidOperationException 異常。
Error.notImplemented 函數
建立一個 Error 對象,該對象表示 Sys.NotImplementedException 異常。
Error.parameterCount 函數
建立一個表示 Sys.ParameterCountException 異常的 Error 對象。
Error.format 函數
建立一個表示 Sys.FormatException 異常的 Error 對象。
Error對象的屬性:
Error.message 欄位
表示對錯誤的說明。
Error.name 欄位
表示用於標識錯誤的名稱。
Error.create 函數
建立一個 Error 對象,該對象包含附加錯誤資訊。
使用 create 函數可以建立包含附加錯誤資訊的 Error 對象。使用 message 參數可將資訊附加於錯誤,當錯誤發生時,這些資訊可在應用程式中顯示;使用該參數也可提供用於跟蹤錯誤的詳細資料。使用 errorInfo 參數可將錯誤資訊作為欄位添加到由該函數建立的 Error 對象。這樣,可以指定自訂錯誤資訊,從而更詳細地描述錯誤。提供的 JavaScript 對象必須具有一個名為 name 的欄位,其中包含標識錯誤的字串。在 errorInfo 對象中,可以提供任意類型、任意名稱的額外欄位,對於自訂異常處理,這非常有用。
/* parammessage:(可選)錯誤訊息字串。errorInfo:(可選)JavaScript 對象執行個體,其中包含錯誤的相關擴充資訊。該對象必須具有一個 name 欄位,其中包含標識錯誤的字串。該對象還可包含對錯誤進行完全描述的欄位。return:一個 Error 對象。*/var err = Error.create(message, errorInfo);
範例程式碼:
function throwAnError(input) { if (input === undefined) { // Throw a standard exception type. var err = Error.argumentNull("input", "A parameter was undefined."); throw err; } else if (input === "Test1") { // Throw a generic error with a message. var messageVar = "A test message."; var err = Error.create(messageVar) throw err; } else if (input === "Test2") { // Throw a generic error with a message and associated errorInfo object. var messageVar = "This error contains an additional custom errorInfo object"; var errorInfoObj = { name: "SomeNamespace.SomeExceptionName", someErrorID: "436" }; var err = Error.create(messageVar, errorInfoObj); throw err; } alert("No error occured.");}throwAnError("Test2");
Error.popStackFrame 函數
更新 Error 執行個體的 fileName 和 lineNumber 屬性,可以指示引發錯誤的位置而不是建立錯誤的位置。 如果要建立自訂錯誤類型,請使用此函數。
一些瀏覽器根據建立 Error 執行個體的位置設定 Error 執行個體的 fileName 和 lineNumber 欄位。如果在建立 Error 執行個體的函數範圍以外引發該執行個體,這可能出現問題。
注意:popStackFrame 方法由 Microsoft AJAX Library 引發的異常調用。僅當定義您自己的錯誤類型時才應調用 popStackFrame 方法。
當您在建立 Error 執行個體的函數內調用該執行個體的 popStackFrame 方法時,將更新該錯誤執行個體的 fileName 和 lineNumber 欄位。這些欄位的值根據引發錯誤的位置而不是建立Error 執行個體的位置設定。 popStackFrame 函數根據瀏覽器堆疊追蹤中的下一幀更新 Error 執行個體的 fileName 和 lineNumber 欄位。這將為調試代碼提供更準確的錯誤資訊。
範例程式碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head id="Head1" runat="server"> <title>Untitled Page</title></head><body> <form id="form1" runat="server"> <asp:ScriptManager runat="server" ID="ScriptManager1"> </asp:ScriptManager> <script type="text/javascript"> // Register classes to test. Type.registerNamespace('Samples'); Samples.A = function(){} Samples.A.registerClass('Samples.A'); Samples.B = function() { Samples.B.initializeBase(this); } Samples.B.registerClass('Samples.B'); // Test the type, create an Error in a function and return it. function validate(testType, expectedType) { if (!testType.isInstanceOfType(expectedType)) { var e = Error.create("Invalid type."); // Ensure that the Error tracks where it is // thrown rather than where it was created. e.popStackFrame(); return e; } } // Cause validate() to create and return an error. var a = new Samples.A(); var b = new Samples.B(); var err = validate(Samples.A, b); if (err) { throw err; } alert("No error occured."); </script> </form></body></html>