知道调用者javascript堆栈上的第一个函数

时间:2016-12-14 16:11:54

标签: javascript jquery

我有以下代码:

$(document).ready(funcA);

function funcA(){
    funcB();
}

function funcB(){
    //some code
}

funcB上,我想知道它是否被$(document).ready事件调用。

我能做到这一点吗?

1 个答案:

答案 0 :(得分:1)

不要这样做

arguments.caller为您提供了拨打电话的功能。

您可以将它与功能进行比较,如此

if(arguments.caller == funcA)

因为函数是变量的类型。然后,您可以执行一个循环,该循环将arguments.caller arguments.caller并跟踪路径,直到您获得null

但是,这是一个非标准功能,可能无法正常工作

相反

您可能想要重新编写所有函数,以便将消息传递给funcB函数,如下所示

我的意思是你这样做(或具有相同原则的东西)

$(document).ready(function(){funcA("called by event listener")});

funcA(message){
   funcB(message);
}

funcB(message){
   if(message == "called by event listener") alert("Came from event listener");
}

请注意,如果使用arguments[arguments.length - 1],则无需为参数命名(如果您不想使所有内容混乱)。 arguments是所有参数的数组。

您也可以尝试使用Function原型,并尝试使每个函数调用沿着它收到的最后一个参数传递,这样您就不必自己动手了。