从函数本身获取函数名称

Jav*_*tar 1 javascript

可能重复:
我可以在javascript中获取当前运行的函数的名称吗?

我想从函数本身获取函数名称.

使用Javascript:

Cube : {
    profile : {
        edit : function(){
            // Get function Path Cube.edit Here
            alert(arguments.callee.name); // Not Working
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

T.J*_*der 8

在您的代码段的功能没有名字,它是匿名的.它分配给的属性profile有一个名称(edit),但该函数没有.没有,有没有办法让editprofile.editCube.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)

但是,在上述所有情况中,有两个问题:

  1. 您正在使用arguments.callee哪个在很多浏览器上都很慢,而在严格模式下无效.

  2. name函数对象的属性是非标准的,这就是为什么这个答案谈论可能必须解析结果的原因Function#toString.问题是,Function#toString非标准(但相当广泛的支持,但在移动浏览器).

你可以通过在Cube对象图中搜索引用该函数的属性来避免第二个问题,但仍然需要使用arguments.callee(除非你给函数一个真实的名字,然后在搜索时使用该真实名称来查找属性路径,导致它).