我想从函数本身获取函数名称.
使用Javascript:
Cube : {
profile : {
edit : function(){
// Get function Path Cube.edit Here
alert(arguments.callee.name); // Not Working
}
}
}
Run Code Online (Sandbox Code Playgroud)
在您的代码段的功能有没有名字,它是匿名的.它分配给的属性profile有一个名称(edit),但该函数没有.没有,有没有办法让edit或profile.edit或Cube.profile.edit从函数对象.
您可以为该函数命名:
Cube : {
profile: {
edit : function edit(){
alert(arguments.callee.name);
}
}
}
Run Code Online (Sandbox Code Playgroud)
...但是这是使用一个命名函数表达式,它将在IE8和更早版本上创建两个单独的函数对象.
你也可以这样做:
Cube : {
profile: {
edit : Cube_profile_edit
}
}
// ...
function Cube_profile_edit(){
alert(arguments.callee.name);
}
Run Code Online (Sandbox Code Playgroud)
但是,在上述所有情况中,有两个问题:
您正在使用arguments.callee哪个在很多浏览器上都很慢,而在严格模式下无效.
name函数对象的属性是非标准的,这就是为什么这个答案谈论可能必须解析结果的原因Function#toString.问题是,Function#toString是还非标准(但相当广泛的支持,但在移动浏览器).
你可以通过在Cube对象图中搜索引用该函数的属性来避免第二个问题,但仍然需要使用arguments.callee(除非你给函数一个真实的名字,然后在搜索时使用该真实名称来查找属性路径,导致它).