我需要在一个函数中获取它的名字(实际上我已经使用.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
像魅力一样,感谢大家!
答案 0 :(得分:2)
您可能对this javascript stacktrace project on github感兴趣。特别要注意stacktrace.js中的findFunctionName方法。
基本上他们使用XMLHTTPRequest重新获取javascript源并拉出声明函数的行。
答案 1 :(得分:1)
如果您使用的是谷歌浏览器,则可以使用堆栈跟踪API获取该信息。请参阅:http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi