javascript - 通过函数获取函数名称[重复]

Posted

技术标签:

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

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

function Hello_world() 
  b();

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

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

【问题讨论】:

不,你不想这样。 What problem你想解决这个问题吗? 试试这个***.com/questions/3178892/… ***.com/questions/280389/… 【参考方案1】:

您可以为此使用三个 despised、deprecated 和 non-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 :)

【讨论】:

以上是关于javascript - 通过函数获取函数名称[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript使用构造函数获取变量的类型名

JavaScript使用构造函数获取变量的类型名

JavaScript 获取函数名称

无法通过JavaScript函数重定向HTML页面

Javascript 中的重映射或映射函数

重命名时Oracle 12C审核触发器