Функция Error.popStackFrame

Выполняет обновление свойства fileName и lineNumber экземпляра Error, чтобы указать место возникновения, а не место создания ошибки. Эта функция используется при создании типов пользовательских ошибок.

errorInstanceVar.popStackFrame();

Некоторые обозреватели задают поле fileName и lineNumber экземпляра Error на основе места создания экземпляра Error. Если экземпляр Error выводится вне области создавшей его функции, может возникнуть проблема.

ПримечаниеПримечание

Для вызова метода popStackFrame используются исключения, созданные Библиотека Microsoft Ajax. Метод popStackFrame следует вызывать только при определении собственных типов ошибок.

При вызове метода popStackFrame экземпляра Error внутри создавшей его функции происходит обновление полей fileName и lineNumber экземпляра ошибки. Эти значения задаются на основе места возникновения ошибки, а не места создания экземпляра Error. Функция popStackFrame выполняет обновление полей fileName и lineNumber экземпляра Error на основании следующего фрейма в трассировщике стека обозревателя. При этом становятся доступны более точные сведения об ошибке, необходимые для отладки кода.

Описание

В следующем примере показана функция, которая создает экземпляр Error и возвращает его в код, вызвавший ее, который затем вызывает экземпляр Error. Поскольку экземпляр Error вызывается вне области создавшей его функции, метод popStackFrame вызывается из функции, создавшей ошибку, до возвращения данной ошибки.

Код


<!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>




Показ: