Мне нужно, изнутри функции, получить ее имя (на самом деле я немного поднимаюсь в стеке с помощью .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
Работает как шарм, спасибо всем!