可能重复:
Can I get the name of the currently running function in javascript?
我想从函数本身获取函数名称。
使用Javascript:
Cube : {
profile : {
edit : function(){
// Get function Path Cube.edit Here
alert(arguments.callee.name); // Not Working
}
}
}
答案 0 :(得分:8)
您的代码段中的函数没有名称,它是匿名的。它在profile
上分配的属性有一个名称(edit
),但该功能没有。不,无法从函数对象中获取edit
或profile.edit
或Cube.profile.edit
。
您可以为该功能命名:
Cube : {
profile: {
edit : function edit(){
alert(arguments.callee.name);
}
}
}
...但是那是使用命名的函数表达式,它将在IE8及更早版本中创建two separate function objects。
你也可以这样做:
Cube : {
profile: {
edit : Cube_profile_edit
}
}
// ...
function Cube_profile_edit(){
alert(arguments.callee.name);
}
然而,在上述所有问题中,有两个问题:
您使用的arguments.callee
在很多浏览器上都非常慢,在strict mode中无效。
函数对象的name
属性是非标准的,这就是为什么this answer谈论可能必须解析Function#toString
的结果的原因。问题是,Function#toString
也非标准(但广泛支持,移动浏览器除外)。
您可以通过在Cube
对象图中搜索引用该函数的属性来避免第二个问题,但仍然需要使用arguments.callee
(除非您为该函数指定一个真实姓名,然后在搜索时使用该真实姓名来查找通向它的属性路径。)