【问题标题】:In javascript, how do I find out the name of a function from within that function? [duplicate]在javascript中,如何从该函数中找出函数的名称? [复制]
【发布时间】:2010-05-18 23:35:18
【问题描述】:

可能重复:
How can I get the name of function inside a JavaScript function?

标题应该清楚。

是否有可能从函数内部确定该函数的名称?

基本上,我正在向多个函数添加一些调试代码,并且我希望能够在每个函数中简单地添加以下行:

if (global_debugOn) alert("Processing function " + function-name);

我怎样才能得到'函数名'?

是的,显然我可以简单地输入函数名(毕竟我输入了整个alert 位),但这样做很麻烦,特别是如果有一种很好的简单方法可以动态检索它。另外,由于函数名称在开发过程中会发生变化,我希望它保持最新...

我希望 arguments 属性可能会保留这个(例如 arguments[0],就像在 C 中一样),但我无法让它工作。我什至不确定arguments 是否仍然有效。

谢谢!

罗里

【问题讨论】:

  • 抱歉,我在发帖之前已经搜索了答案 - 一定是错过了。

标签: javascript function debugging


【解决方案1】:

最接近的是arguments.callee,它实际上返回的是函数本身,而不是名称。

唯一的另一件事是arguments.caller,它返回一个字符串,但这仅在 Mozilla 中,甚至不再支持。

最后一个选项是调用 arguments.callee.toString() .. 但这将返回函数声明,而不仅仅是名称。

【讨论】:

  • 所以只需调用arguments.callee.toString() 并解析它以显示您需要的任何内容?例如,修剪它,以便删除第一个括号之后(包括第一个括号)的所有内容。
  • @Duracell toString() 的输出依赖于实现,甚至可能不包含函数名称。我看到一些返回“[object Function]”。不可靠。
  • 哦,好的。哎哟。看起来最好的方法是为函数分配一个名称作为成员。
【解决方案2】:

你可以说 arguments.callee.toString() 并且名字可能在里面。如果您匿名声明函数,则不会,即 var f = function () {} 而不是 function f(){}

【讨论】:

    【解决方案3】:
    function someFunc() {
            var ownName = arguments.callee.toString();
            ownName = ownName.substr('function '.length);
            ownName = ownName.substr(0, ownName.indexOf('('));
            alert(ownName);
    }
    
    someFunc();
    

    【讨论】:

    • 或一行 - String(arguments.callee).split('(')[0];
    猜你喜欢
    • 2013-07-09
    • 2011-01-10
    • 1970-01-01
    • 2016-01-15
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2021-11-25
    相关资源
    最近更新 更多