我正在尝试获取当前正在运行的函数的名称。根据我的阅读,应该可以使用:
(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();