Error.popStackFrame 함수

오류가 만들어진 위치 대신 오류가 throw된 위치를 나타내기 위해 Error 인스턴스의 fileNamelineNumber 속성을 업데이트합니다. 사용자 지정 오류 형식을 만드는 경우 이 함수를 사용하십시오.

errorInstanceVar.popStackFrame();

일부 브라우저에서는 Error 인스턴스가 만들어진 위치에 따라 Error 인스턴스의 fileNamelineNumber 필드를 설정합니다. 이는 Error 인스턴스를 만든 함수가 아닌 다른 곳에서 인스턴스가 throw될 경우에 문제가 될 수 있습니다.

참고참고

popStackFrame 메서드는 Microsoft AJAX 라이브러리에서 throw되는 예외를 통해 호출됩니다. 사용자 지정 오류 형식을 정의하는 경우에만 popStackFrame 메서드를 호출해야 합니다.

Error 인스턴스를 만든 함수 내에서 인스턴스의 popStackFrame 메서드를 호출하면 오류 인스턴스의 fileNamelineNumber 필드가 업데이트됩니다. 이때 각 필드의 값은 Error 인스턴스가 만들어진 위치 대신 오류가 throw된 위치를 기반으로 설정됩니다. popStackFrame 함수는 브라우저의 스택 추적에서 다음 프레임을 기반으로 Error 인스턴스의 fileNamelineNumber 필드를 업데이트합니다. 이렇게 되면 더 정확한 오류 정보가 제공되므로 코드를 디버깅하는 데 유용합니다.

설명

다음 예제에서는 Error 인스턴스를 만들고 이 인스턴스를 호출한 코드에 반환하여 Error 인스턴스를 throw하는 함수를 보여 줍니다. Error 인스턴스는 인스턴스를 만든 함수 외부에서 throw되므로 오류가 반환되기 전에 이 오류를 생성한 함수에서 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>





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




표시: