Мне нравится использовать простой способ: 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/