Function.caller

Did you know that you can read content offline by using one of these tools? If you would like to read offline MDN content in another format, let us know by commenting on Bug 665750.

Dash App

非標準

概要

指定した関数の呼び出し元の関数を返します。

このプロパティは、ECMA-262 第 3 版の一部ではありません。これは少なくとも SpiderMonkey (Mozilla が用いている JavaScript エンジン) (バグ 65683 をご覧ください)、V8 (Chrome で用いられる JavaScript エンジン)、および JScript で実装されています。

Function のプロパティ
実装されたバージョン JavaScript 1.5
ECMAScript エディション 定義されていない

説明

関数 f がトップレベルのコードで呼び出された場合 f.caller の値は null に、それ以外の場合の値は f を呼び出した関数になります。

このプロパティは、廃止された arguments.caller を置き換えます。

補足

再帰呼び出しの場合、このプロパティを用いてコールスタックを再現することはできません。以下について考えてみましょう:

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__ は呼び出し元の activation オブジェクトを返し、スタックの再現に利用できましたが、セキュリティ上の理由により削除されました。

例

例: 関数の 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);
}

ブラウザのサポート

Function.caller は現状、すべての主要なブラウザ (Firefox、Safari、Chrome、Opera、および IE) でサポートされています。
(互換性情報: ECMAScript extensions compatibility table )

タグ (3)