匿名函数中的函数调用者名称

时间:2010-12-27 09:56:45

标签: javascript anonymous-function

我猜是没有办法在匿名函数中获取函数调用者名称,是吗?

(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();

2 个答案:

答案 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];
}