从var定义的函数中获取名称

时间:2011-12-11 21:22:30

标签: javascript function

我需要在一个函数中获取它的名字(实际上我已经使用.caller上升了一点但是不应该改变这个问题。)

' arguments.callee.name'如果我的功能被命名,将解决我的问题。但我的函数是用 var myFunc = function(){} 声明的,并且不可能改变它(我使用CoffeeScript总是编译为var声明)。

那么我怎样才能找到分配函数的变量?

这是出于调试目的,所以我不担心性能,无论处理/时间成本如何,我都会使用任何操作来获取名称。

编辑:对于记录,这是我在CoffeeScript中根据所选答案的推荐库实现的:

window.log = (msg) ->
  caller = printStackTrace()[4]
  caller = caller.substring 0, caller.indexOf('(') - 1
  if typeof msg is 'object'
    console.log "v --- at #{ caller }: ---"
    console.log msg
  else console.log "> --- at #{ caller }: " + msg

像魅力一样,感谢大家!

2 个答案:

答案 0 :(得分:2)

您可能对this javascript stacktrace project on github感兴趣。特别要注意stacktrace.js中的findFunctionName方法。

基本上他们使用XMLHTTPRequest重新获取javascript源并拉出声明函数的行。

答案 1 :(得分:1)

如果您使用的是谷歌浏览器,则可以使用堆栈跟踪API获取该信息。请参阅:http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi