Получить имя из функции, определенной с помощью var - PullRequest
3 голосов
/ 12 декабря 2011

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

2 голосов
/ 12 декабря 2011

Вас может заинтересовать этот проект стековой трассировки javascript на github . В частности, обратите внимание на метод findFunctionName в stacktrace.js .

По сути, они повторно выбирают источник javascript с использованием XMLHTTPRequest и вытягивают строку, где была объявлена ​​функция.

1 голос
/ 12 декабря 2011

Если вы используете Google Chrome, вы можете использовать API отслеживания стека, чтобы получить эту информацию. Смотри: http://code.google.com/p/v8/wiki/JavaScriptStackTraceApi

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...