我正在尝试获取当前正在运行的函数的名称。根据我的阅读,应该可以使用:

(arguments.callee.toString()).match(/function\s+(\[^\s\(]+)/)

但是,当我在Firefox和Safari(Mac上的最新版本)中运行此文件时,未返回名称。

console.log(arguments.callee)返回函数的源,但不返回分配的名称。 arguments.callee.name返回一个空字符串。

我的示例代码如下:
var testobj = {
    testfunc: function(){
        console.log( (arguments.callee.toString()).match(/function\s+(\[^\s\(]+)/) );
    }
}
testobj.testfunc();

最佳答案

典型的arguments.callee hack在这里不起作用,因为您所做的事情被分配了一个匿名函数作为对象的'testfunc'键的值。在这种情况下,黑客攻击甚至会变得更糟,但是可以这样做,如下所示:

var testobj = {
    testfunc: function(){
      for (var attr in testobj) {
              if (testobj[attr] == arguments.callee.toString()) {
                  alert(attr);
                  break;
                }
            }
    }
}
testobj.testfunc();

09-25 15:35