有没有办法在被调用者中获取调用者函数的名称?

时间:2011-04-21 23:31:08

标签: javascript jquery

  

可能重复:
  Javascript how do you find the caller function?

今天早上我正在尝试使用javascript / jQuery,并试图捕获当前正在执行的函数的调用者名称。

因此,在下面的示例中,日志将runMe显示为调用方,showMe显示为被调用者。

jQuery(document).ready(function($) {

  function showMe() {
    // should log the runMe as the caller and showMe as callee
    console.log('Callee: ',arguments.callee)
    console.log('Caller: ',arguments.caller);
  }

  function runMe() {
    // getting executed as a button is pressed.
    showMe();
  }

  $('a').bind('click', function(e) {
    e.preventDefault();
    runMe();
  });

});

以上显然不起作用,因此我向大家提问。

在上面的例子中有没有一个很好的方法来获得调用者?

请注意:我知道我可以获得runMe的被调用者并将其作为参数传递给showMe但是这个问题的目的是找到一个不需要调用者的解决方案被传递到'手动'功能。

是否有理由反对做这样的事情?

4 个答案:

答案 0 :(得分:17)

您曾经能够arguments.caller.name,但这是deprecated in Javascript 1.3

arguments.callee.caller.name(或仅showMe.caller.name)是another way to go。在所有主流浏览器中都是non-standard, but currently supported

答案 1 :(得分:3)

尝试callee.caller这样的

 function showMe() {
        // should log the runMe as the caller and showMe as callee
        console.log('Callee: ',arguments.callee.name)
        console.log('Caller: ',arguments.callee.caller.name);
      }

答案 2 :(得分:2)

这对你有用吗?

function showMe() {
    // should log the runMe as the caller and showMe as callee
    console.log('Callee: ',arguments.callee)
    console.log('Caller: ',arguments.callee.caller);
  }

注意,这是非标准的javascript。

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/caller

答案 3 :(得分:1)

我认为是......

arguments.callee.caller