Function.caller
非推奨: この機能は非推奨になりました。まだ対応しているブラウザーがあるかもしれませんが、すでに関連するウェブ標準から削除されているか、削除の手続き中であるか、互換性のためだけに残されている可能性があります。使用を避け、できれば既存のコードは更新してください。このページの下部にある互換性一覧表を見て判断してください。この機能は突然動作しなくなる可能性があることに注意してください。
function.caller
プロパティは、指定した関数の呼び出し元の関数を返します。厳格モード、非同期関数、ジェネレーター関数の呼び出し元については null
を返します。
解説
関数 f
が最上位のコードで呼び出された場合、 f.caller
の値は null
に、それ以外の場合の値は f
を呼び出した関数になります。厳格モード、非同期関数、ジェネレーター関数の呼び出し元についても null
を返します。
このプロパティは、廃止された arguments
オブジェクトの arguments.caller
プロパティを置き換えます。
特殊プロパティである __caller__
は呼び出し元の activation オブジェクトを返し、スタックの再現に利用できましたが、セキュリティ上の理由により削除されました。
注
再帰呼び出しの場合、このプロパティを用いてコールスタックを再現することはできません。以下について考えてみましょう。
function f(n) {
g(n - 1);
}
function g(n) {
if (n > 0) {
f(n);
} else {
stop();
}
}
f(2);
stop()
が呼び出された時点のコールスタックは以下のようになるでしょう。
f(2) -> g(1) -> f(1) -> g(0) -> stop()
以下は真になります。
stop.caller === g && f.caller === g && g.caller === f;
従って、stop()
関数のスタックトレースを以下のようにして取得するとします。
var f = stop;
var stack = "Stack trace:";
while (f) {
stack += "\n" + f.name;
f = f.caller;
}
これは無限ループになります。
例
関数の caller プロパティの値を確認する
以下のコードは、関数の caller
プロパティの値を確認します。
function myFunc() {
if (myFunc.caller == null) {
return "The function was called from the top!";
} else {
return "This function's caller was " + myFunc.caller;
}
}
仕様書
いずれの標準仕様でも定義されていません。
ブラウザーの互換性
BCD tables only load in the browser