Microsoft AJAX Library对 Error的扩展

颛孙博易
2023-12-01

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 对象中,可以提供任意类型、任意名称的额外字段,对于自定义异常处理,这非常有用。

/* param
message:(可选)错误消息字符串。
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>

 

转载于:https://www.cnblogs.com/youring2/archive/2013/01/06/2847823.html

 类似资料: