mozilla
Your Search Results

    Function.caller

    非標準
    This feature is non-standard and is not on a standards track. Do not use it on production sites facing the Web: it will not work for every user. There may also be large incompatibilities between implementations and the behavior may change in the future.

    概要

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

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

    説明

    関数 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

    ドキュメントのタグと貢献者

    Contributors to this page: teoli, ethertank, yyss
    最終更新者: teoli,