Javascript 如何检测调用方函数和调用方位置

Javascript 如何检测调用方函数和调用方位置,javascript,Javascript,我试图检测调用方函数及其来源 例如: 假设我们有以下关于HTML内容的行 <script src="/somefunc.js"></script> 如您所见,exampleFunction正在调用getElementById函数。为了检测这些调用,我用以下代码覆盖了getElemenyById document._oldGetElementById = document.getElementById; document.getElementById = function

我试图检测调用方函数及其来源

例如:

假设我们有以下关于HTML内容的行

<script src="/somefunc.js"></script>
如您所见,exampleFunction正在调用getElementById函数。为了检测这些调用,我用以下代码覆盖了getElemenyById

document._oldGetElementById = document.getElementById;
document.getElementById = function(elemIdOrName) {
    var result = document._oldGetElementById(elemIdOrName);
    if (! result) {
        var elems = document.getElementsByName(elemIdOrName); 
        if (elems && elems.length > 0) {
            result = elems[0];
        }
    }
    console.log("someone called me! Caller function = "+arguments.callee.caller);
    return result;
};
但我无法获得关于哪个函数调用方以及它的位置的信息?我的意思是我想获得如下输出之类的信息

Caller = exampleFunction
Caller location = site.com/somefunc.js

有什么想法吗?

您可以在Chrome的调试器中查看调用堆栈。 只需在重写的函数中添加一个断点并调用它,就可以跟踪调用方js文件。 附上一张截图 如果要在控制台上打印,请编辑 尝试
console.log new Error.stack

exampleFunction=function{var f=document.getElementByIdhello}是匿名的。尝试添加函数名以获得函数名,例如exampleFunction=function exFunction{var f=document.getElementByIdhello}pmverma,这听起来像是一个答案。到OP-你得到了什么输出?只是未定义的还是别的什么?@DannyStaple我没有运行这个。但是,如果不给函数命名,就无法得到实际的函数名..正如Mehmet Ince所做的那样。我错了吗?@pmverma实际上我通过arguments.callee.caller获得了exampleFunction的全部内容。但主要问题是获取函数位置。我需要知道调用方函数的位置是什么?@MehmetInce arguments.callee.name返回函数名。老实说,获取函数位置对我来说是个意外。
Caller = exampleFunction
Caller location = site.com/somefunc.js