两部分问题:
function.caller
。示例:
foo = {
bar: function() {console.log(bar.caller);}
}
>> SyntaxError: function statement requires a name
示例2:
[bar.caller]();
?
提前致谢
答案 0 :(得分:1)
您发布的代码存在的问题是bar
并不代表匿名函数中的任何内容。名称" bar"是分配给foo
的对象的属性名称。因此,这很好用:
var foo = {
bar: function() {
console.log("Caller is: " + foo.bar.caller);
}
};
function x() {
foo.bar();
}
x();
该功能不需要名称;那是无关紧要的。为了进入caller
属性,您需要对该函数的引用,这可以来自任何地方。因此,这也可以起作用:
var foo = {
bar: function() {
console.log("Caller is: " + this.bar.caller);
}
};
function x() {
foo.bar();
}
x();
因为当foo.bar()
调用该函数时,this
的值将是" foo"对象
答案 1 :(得分:0)
要获取调用者(如果存在),请使用:
var caller = arguments.callee.caller;
要使用它,您必须首先检查它是否存在:
if(caller)
caller();
示例:强>
function foo(param){
if(param == 5) return console.log(param);
var caller = arguments.callee.caller;
if(caller)
caller(param + 1);
}
function bar(param){
foo(param);
}
foo(3); // won't log anything (no caller and param != 5)
bar(3); // will cause a recursion until param == 5 then logs it.