我猜是没有办法在匿名函数中获取函数调用者名称,是吗?
(function()
{
var cls = function()
{
this.foo = function()
{
console.log(arguments.callee.caller); // null
foo1();
}
var foo1 = function()
{
console.log(arguments.callee.caller); // foo
foo2();
}
var foo2 = function()
{
console.log(arguments.callee.caller); // foo1
cls.foo(); // local
}
var cls =
{
foo : function()
{
console.log(arguments.callee.caller); // cls.foo2
}
}
}
return (window.cls = cls);
})();
var c1 = new cls();
c1.foo();
答案 0 :(得分:3)
正确 - 他们是匿名的。如果你需要通过被叫方知道他们的名字,你需要给他们一个名字。 this.foo = function foo()
而不是this.foo = function()
之类的东西会对你有效吗?
答案 1 :(得分:1)
最近版本的Chrome和Firefox可能如下所示。我只建议将其用于调试目的(例如,非生产中的javascript跟踪)
var mystery = function() {
var myNameInChrome = /.*Object\.(.*)\s\(/.exec(new Error().stack)[1];
var myNameInFF = new Error().stack.split("@")[0];
}