StackTrace
Вы можете найти всю трассировку стека, используя специальный код браузера. Хорошо, что кто-то уже сделал это ; Вот код проекта на GitHub .
Но не все новости хороши:
Очень медленно получить трассировку стека, поэтому будьте осторожны (подробнее читайте это ).
Вам нужно определить имена функций для трассировки стека, чтобы они были разборчивыми. Потому что, если у вас есть такой код:
var Klass = function kls() {
this.Hello = function() { alert(printStackTrace().join('\n\n')); };
}
new Klass().Hello();
Google Chrome предупредит ... kls.Hello ( ...
, но большинство браузеров ожидают имя функции сразу после ключевого слова function
и будут рассматривать его как анонимную функцию. Даже Chrome не сможет использовать имя Klass
, если вы не дадите имя kls
функции.
И, между прочим, вы можете передать функции printStackTrace параметр {guess: true}
, но я не нашел реального улучшения, сделав это.
Не все браузеры предоставляют одинаковую информацию. То есть параметры, столбец кода и т. Д.
Имя функции вызывающего абонента
Кстати, если вам нужно только имя функции вызывающей стороны (в большинстве браузеров, но не в IE), вы можете использовать:
arguments.callee.caller.name
Но учтите, что это имя будет одним после ключевого слова function
. Я не нашел способа (даже в Google Chrome) получить больше, чем без кода всей функции.
Код функции звонящего по телефону
И суммируя остальные лучшие ответы (Пабло Кабрера, Нурдин и Грег Хьюгилл). Единственная кросс-браузерная и действительно безопасная вещь, которую вы можете использовать:
arguments.callee.caller.toString();
Который покажет код функции вызывающего абонента. К сожалению, этого недостаточно для меня, и именно поэтому я даю вам подсказки для StackTrace и функции вызывающей стороны Name (хотя они не являются кросс-браузерными).