1

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

我想从函数本身获取函数名。

Javascript:

Cube : {
    profile : {
        edit : function(){
            // Get function Path Cube.edit Here
            alert(arguments.callee.name); // Not Working
        }
    }
}
4

1 回答 1

8

您的代码片段的函数没有名称,它是匿名的。分配给它的属性profile有一个名称 ( edit),但函数没有。不,没有办法从函数对象中获取editprofile.edit获取。Cube.profile.edit

您可以为函数命名:

Cube : {

   profile: {
       edit : function edit(){

         alert(arguments.callee.name);

       }
   }
}

...但这是使用命名函数表达式,它将在 IE8 和更早版本上创建两个单独的函数对象。

你也可以这样做:

Cube : {

   profile: {
       edit : Cube_profile_edit
    }
}
// ...

function Cube_profile_edit(){

    alert(arguments.callee.name);
}

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

  1. 您正在使用它在许多浏览器上都非常慢,并且在严格模式下arguments.callee无效。

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

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

于 2012-12-07T07:22:32.447 回答