从函数本身获取函数名称

时间:2012-12-07 07:17:10

标签: javascript

  

可能重复:
  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
        }
    }
}

1 个答案:

答案 0 :(得分:8)

您的代码段中的函数没有名称,它是匿名的。它在profile上分配的属性有一个名称(edit),但该功能没有。不,无法从函数对象中获取editprofile.editCube.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);
}

然而,在上述所有问题中,有两个问题:

  1. 您使用的arguments.callee在很多浏览器上都非常慢,在strict mode中无效。

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

  3. 您可以通过在Cube对象图中搜索引用该函数的属性来避免第二个问题,但仍然需要使用arguments.callee(除非您为该函数指定一个真实姓名,然后在搜索时使用该真实姓名来查找通向它的属性路径。)