На любом языке программирования я могу проследить любую функцию и знать, какая функция вызвана другим. Но в JavaScript, я не знаю, как, так как код не написан мной, и Firebug не дает эту функцию - насколько я знаю.
Пример:
Я хочу отобразить имена функций каждой функции, которая вызвана при нажатии на XYZ Element, и отобразите их в порядке.
Спасибо.
Нашел это: Javascript stacktrace в любом браузере , Джеймс говорит, что у них есть аккаунт на github
function printStackTrace() {
var callstack = [];
var isCallstackPopulated = false;
try {
i.dont.exist+=0; //doesn't exist- that's the point
} catch(e) {
if (e.stack) { //Firefox
var lines = e.stack.split('\n');
for (var i=0, len=lines.length; i<len; i++) {
if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
callstack.push(lines[i]);
}
}
//Remove call to printStackTrace()
callstack.shift();
isCallstackPopulated = true;
}
else if (window.opera && e.message) { //Opera
var lines = e.message.split('\n');
for (var i=0, len=lines.length; i<len; i++) {
if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
var entry = lines[i];
//Append next line also since it has the file info
if (lines[i+1]) {
entry += " at " + lines[i+1];
i++;
}
callstack.push(entry);
}
}
//Remove call to printStackTrace()
callstack.shift();
isCallstackPopulated = true;
}
}
if (!isCallstackPopulated) { //IE and Safari
var currentFunction = arguments.callee.caller;
while (currentFunction) {
var fn = currentFunction.toString();
var fname = fn.substring(fn.indexOf("function") + 8, fn.indexOf('')) || 'anonymous';
callstack.push(fname);
currentFunction = currentFunction.caller;
}
}
output(callstack);
}
function output(arr) {
// Output however you want
alert(arr.join('\n\n'));
}
DynaTrace AJAX имеет некоторые из таких функций. Не совсем то, что вы ищете, но дает вам события и функции, связанные с элементом, и помогает устранять неполадки. Была бесплатная загрузка, проверьте.
Если вы просто хотите отладить свой код, лучший вариант - получить подключаемый модуль отладчика для вашего браузера. Плагин Firebug действительно предоставляет трассировку стека. ( см. Здесь )
Если вы хотите сделать это из своего кода, не существует стандартной языковой функции JavaScript, которая позволяла бы вам это делать. Различные браузеры могут реализовывать нестандартные расширения, но вам не следует полагаться на них.
Вы можете увидеть трассировку стека любой ошибки с помощью вызова функции stack ()
(в Firefox). Создание простой функции для печати трассировки стека может выглядеть следующим образом:
function getStackTrace() {
try {
unusedVariable++; // This creates an error we can trace
}
catch (e) {
return e.stack;
}
}
В других браузерах есть разные способы печати трассировки стека, но это должно дать вам то, что вам нужно для Firefox.
Надеюсь, это поможет.