У меня есть функция в JS, которая вызывается из нескольких мест.
Теперь я тестирую эту страницу на iPad и, следовательно, немного отлаживаю отладки.
Можно ли каким-то образом узнать (напечатать на консоли), откуда вызывается моя функция?
У меня есть функция в JS, которая вызывается из нескольких мест.
Теперь я тестирую эту страницу на iPad и, следовательно, немного отлаживаю отладки.
Можно ли каким-то образом узнать (напечатать на консоли), откуда вызывается моя функция?
Как это?
function testOne() {
console.log("Test 1");
logTest();
}
function testTwo() {
console.log("Test 2");
logTest();
}
function logTest() {
console.log("Being called from " + arguments.callee.caller.toString());
}
testOne();
testTwo();
Если вы используете 'use strict';
в своем файле JavaScript, вам нужно его прокомментировать/удалить, потому что в противном случае вы получите что-то вроде этого:
Невозможно использовать TypeError: свойства "вызывающий", "вызываемый" и "аргументы" могут быть недоступны для функций строгого режима или объектов аргументов для их вызовов
Простым способом, который я хотел бы использовать, является arguments.callee.caller.name
.
Скажите, что вы хотели знать, что вызывало функцию myFunction:
function myFunction() {
console.log(arguments.callee.caller.name);
/* Other stuff... */
}
Поддержка браузера для этого не так уж велика, поэтому вместо этого вы можете использовать arguments.callee.caller.toString(). Обратите внимание, что это вернет вам содержимое функции, которая называется myFunction, поэтому вам нужно будет выкопировать имя функции из этого.
Или вы можете использовать хорошую функцию отслеживания стека, например:
function getStack(){
fnRE = /function\s*([\w\-$]+)?\s*\(/i;
var caller = arguments.callee.caller;
var stack = "Stack = ";
var fn;
while (caller){
fn = fnRE.test(caller.toString()) ? RegExp.$1 || "{?}" : "{?}";
stack += "-->"+fn;
caller = caller.arguments.callee.caller;
};
return stack;
}
Трассировка стека через http://www.amirharel.com/2010/01/25/using-caller-and-callee-for-stack-trace/
Хотите подробно рассказать о функции вызывающего абонента:
function nishant(){ // Caller function
kumar();
}nishant();
function kumar(){ // Callee
console.log("This functiona is being called by " + arguments.callee.caller.toString());
}
Вместо arguments.callee.caller.toString()
мы также можем использовать functionName.caller
Пример:
function nishant(){ // Caller function
kumar();
}nishant();
function kumar(){ // Callee
console.log("This functiona is being called by " + kumar.caller);
}
Выход: будет одинаковым в обоих случаях выше.
This functiona is being called by function nishant()
{
kumar();
}
Не используйте function.caller, он нестандартный и не рекомендуется.
Вместо этого используйте консоль браузера и поставьте точки останова в своей функции, проверьте стек вызовов. Вот снимок экрана консоли отладчика Chrome