呼び出し元関数の情報を取得しています
arguments.callee.caller
しかし、呼び出し元の関数を再度呼び出したい場合は、何をする必要がありますか?
その関数をもう一度呼び出すだけです。
arguments.callee.caller()
例:
function A(){
B();
}
function B(){
arguments.callee.caller(); // It will call the A again.
}
関数内arguments.callee.caller
には呼び出し元関数への参照があり、実際typeof arguments.callee.caller === 'function'
には直接呼び出すことができます。
arguments.callee.caller(arg1, arg2, arg3, [...]);
または、これを行うことができます:
arguments.callee.caller.call(context, arg1, arg2, arg3, [...]);
またはこれ:
arguments.callee.caller.apply(context, [arg1, arg2, arg3, [...]]);
他の人が言ったように、パフォーマンスのヒットに注意してください!
私の最初のヒントはこれです:
var nm = arguments.callee.caller.name
そして、「nm」と呼びます。evalを使用するか、いくつかのスイッチケースを使用します。
無限ループに注意してください:
// The 'callee'
function f(arg) {
var cf = arguments.callee.caller;
cf.call(42);
}
// .. and the caller
function g(arg) {
if (arg === 42) {
alert("The Answer to..");
} else {
f(1); // or whatever
}
}
// call the caller
g(21)
arguments.callee.callerよりもFunction.callerを優先する必要があります(特に、これが非推奨であるかどうかについて人々が決心できないため)
JavaScriptでarguments.callee.callerプロパティが非推奨になったのはなぜですか?
使用法を例示するには:
var i = 0;
function foo () {
bar();
}
function bar() {
if ( i < 10 ) {
i += 1;
bar.caller();
}
}
foo();
// Logs 10
console.log(i);
現実の世界では、呼び出し元が関数であることを確認してから呼び出すことをお勧めします。