我需要从一个函数中获取它的名称(实际上我使用 .caller 在堆栈中向上移动了一点,但这不应该改变问题)。
如果我的函数已命名,“arguments.callee.name”将解决我的问题。但是我的函数是用 var myFunc = function() {} 声明的,并且不可能更改它(我使用的是始终编译为 var 声明的 CoffeeScript)。
那么我怎样才能得到分配函数的变量呢?
这是为了调试目的,所以我不担心性能,无论处理/时间成本如何,我都会使用任何让我得到名字的操作。
编辑:作为记录,这是我根据所选答案的推荐库在 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
效果很好,谢谢大家!
最佳答案
您可能对 this javascript stacktrace project on github 感兴趣.特别要注意 stacktrace.js 中的 findFunctionName 方法.
基本上,他们使用 XMLHTTPRequest 重新获取 javascript 源代码并提取函数声明处的行。
关于javascript - 从用 var 定义的函数中获取名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8467578/