【问题标题】:Get function name from function itself [duplicate]从函数本身获取函数名称[重复]
【发布时间】:2012-12-07 07:17:10
【问题描述】:

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

【问题讨论】:

  • 你可以直接命名你的函数:edit: function edit() { ... }
  • @Osiris 我解决了这个问题。但我没有得到我的答案。 alert(arguments.callee.name); 不适用于上述代码示例。
  • @elclanrs:这会在 IE8 和更早版本上创建 two functions
  • @elclanrs 我在问题中编辑我的代码。请看一下。现在我想得到 profile.edit()
  • @JavedAkhtar:更改代码只是添加一个进一步的对象层是没有意义的,它根本不会改变问题,只会使现有答案在编辑之前看起来很奇怪。

标签: javascript


【解决方案1】:

你代码中的函数 sn -p 没有名字,它是匿名的。在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是非标准的(但得到相当广泛的支持,除了在移动浏览器上)。

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

【讨论】:

    猜你喜欢
    • 2021-07-02
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 2021-04-11
    • 1970-01-01
    • 2021-02-12
    相关资源
    最近更新 更多