【问题标题】:javascript - Get name of function through a function [duplicate]javascript - 通过函数获取函数名称[重复]
【发布时间】:2014-05-19 14:45:58
【问题描述】:

也就是说,我有函数Hello_world()

function Hello_world() {
  b();
}

我想创建函数b(),其中b() 返回调用它的函数的名称。在这种情况下,我希望 b() 返回 "Hello_world"

那么b()应该如何构造呢?谢谢。

【问题讨论】:

标签: javascript


【解决方案1】:

您可以为此使用三个 despiseddeprecatednon-standard 属性:

function b() {
    return arguments.callee.caller.name;
}

不要指望它可以在旧浏览器、新浏览器、严格模式、Internet Explorer 中运行……

【讨论】:

  • +1 我不知道。如果它是非标准的,我们可以将方法名称作为参数传递给b(theCallerName){ return theCallerName}吗?
  • 是的,你可以而且应该,尽管这让b() 变得多余:-)
  • @Praveen——希望您传递对函数的引用,而不仅仅是其名称。 ;-)
  • @RobG:实际上我的意思是把名字作为字符串传递是最好的解决方案:-)
【解决方案2】:

堆栈跟踪还有一个技巧,它也被鄙视(因为它高度依赖于平台)并且至少可以说丑陋:

function getStackTrace() { return new Error().stack; }

这会在 chrome 的开发者控制台中返回类似的内容:

"Error
    at getStackTrace (<anonymous>:2:35)
    at <anonymous>:2:1
    at Object.InjectedScript._evaluateOn (<anonymous>:581:39)
    at Object.InjectedScript._evaluateAndWrap (<anonymous>:540:52)
    at Object.InjectedScript.evaluate (<anonymous>:459:21)"

然后你从那里开始使用正则表达式。

可以在 Chrome 中工作,但对其他人不确定,因此对生产版本不利。不错的 hack :)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 2012-12-20
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多