我正在通过
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 或一些 switch-cases。
你应该喜欢 Function.caller 而不是 arguments.callee.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);
尽管在现实世界中,您可能希望在调用它之前检查调用者是一个函数。
注意无限循环:
// 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)