3

fを指すメソッドの名前を取得する関数が必要になることがよくありますf。例えば。へのリンクであるプロパティを見つけるために onを使用するgetMethodName(obj, methodFunction)関数があるとします。foreachobjmethodFunction

obj = { 
    foo : function() {
        var myName = getMethodName(obj, arguments.callee); // "foo"
    }
}

非推奨の厳密モードでこれを行うにはどうすればよいですか?arguments.callee

4

2 に答える 2

4

あなたはそれをすることはできません。そもそもそれを行うべきではありません。これは魔法です。関数は呼び出し元などに依存してはなりません。設計を変更して、再び機能させるようにしてください。

arguments.calleeスタイルが悪いという理由だけで.callerなく、最適化を無効にするという理由でも削除されました。つまり、インライン化です。呼び出し元や関数に依存している場合、何かをインライン化することはできません。これは、コードが関数のない場所に配置されている可能性があるためです。

読む: http://whereswalden.com/2010/09/08/new-es5-strict-mode-support-now-with-poison-pills/

于 2011-01-09T18:46:24.200 に答える
1

考慮したかどうかはわかりませんが、オブジェクトリテラルで関数に名前を指定するだけで、次のように参照できることを指摘しておく価値があります。

obj = { 
    foo : function METHODNAME() {
        var myName = getMethodName(obj, METHODNAME); // "foo"
    }
}

ただし、注意してください。IEにはリリースバージョンにバグがあり、これMETHODNAMEにより、(その関数のみにアクセスできるようにするのではなく)囲んでいるスコープで指定された関数が定義されます。evalただし、仕様によれば、これは完全にコーシャであり、関数自体のどこにも見つからない名前、または関数がを呼び出すことができる場合に渡されるコードで名前を使用する限り、完全に正常に機能しますeval

于 2011-01-09T23:41:19.910 に答える