Error.popStackFrame 関数
更新 : 2007 年 11 月
Error インスタンスの fileName プロパティと lineNumber プロパティを更新し、エラーが作成された場所ではなく、エラーがスローされた場所を示します。この関数は、カスタム エラー型を作成する場合に使用します。
errorInstanceVar.popStackFrame();
解説
一部のブラウザは、Error インスタンスの fileName フィールドと lineNumber フィールドを Error インスタンスが作成された場所に基づいて設定します。このことは、Error インスタンスがそれを作成した関数のスコープ外でスローされた場合に問題になります。
![]() |
---|
popStackFrame メソッドは、Microsoft AJAX Library によってスローされる例外で呼び出されます。popStackFrame メソッドを呼び出すのは、独自のエラー型を定義している場合のみです。 |
Error インスタンスの popStackFrame メソッドを、そのインスタンスを作成した関数内で呼び出すと、エラー インスタンスの fileName フィールドと lineNumber フィールドが更新されます。これらの値は、Error インスタンスが作成された場所ではなく、エラーがスローされた場所に基づいて設定されます。popStackFrame 関数は、Error インスタンスの fileName フィールドと lineNumber フィールドを、ブラウザのスタック トレースの次のフレームに基づいて更新します。これにより、コードをデバッグする際に、より正確なエラー情報を得られます。
説明
次の例は、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>