我在JS中有一个函数,它从多个地方调用..
现在我在iPad上测试这个页面,因此发现调试有点困难。
我可以通过某种方式(在控制台上打印)从我的函数调用位置找到吗?
答案 0 :(得分:15)
喜欢这个吗?
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();
如果您在JavaScript文件中使用'use strict';
,则需要对其进行评论/删除,否则您将获得以下内容:
未捕获的TypeError:严格模式函数或调用它们的参数对象可能无法访问'caller','callee'和'arguments'属性
答案 1 :(得分:10)
我喜欢使用的一种简单方法是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/
进行堆栈追踪答案 2 :(得分:0)
想详细了解来电者功能:
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();
}
答案 3 :(得分:0)