使用arguments.callee.caller获取调用函数的参数

时间:2014-05-21 12:59:44

标签: javascript function debugging

我想改进我的调试功能,以包含有关调用debug()的函数的信息。

我使用 arguments.callee.caller.name debug.caller.name更精确)来获取调用debug()的函数的名称。

有没有办法获取调用函数的参数?

假设我有这个例子:

function test(paramOne, paramTwo){
    debug();
}

function debug(){
    console.log("function "+debug.caller.name+": ");
    console.log("parameter: ");
    console.log(debug.caller.parameter); // does not work
    //(i expect an array at this point)
}

2 个答案:

答案 0 :(得分:2)

您应该使用debug.caller.arguments代替debug.caller.parameter

答案 1 :(得分:1)

function.name是ECMA 6的实验技术 - 它在所有浏览器中都不起作用。 arguments.callee已弃用,但未被调用者

function test (param1,param2)   
  {
  debug  ();
  }

function debug ()
  {
  var caller=debug.caller;

  //-- get function name
  var RegExp_FuncName=new RegExp ("function.*(?=\\()");
  var RegExp_Space=new RegExp (" ","g");
  var name=caller.toString().match (RegExp_FuncName);
  name=name[0].replace (RegExp_Space,"");
  name=name.slice (8,name.length);
  if (name=="") name="anonymous";

  //-- get parameters
  var parameters=caller.arguments;

  var i,l=parameters.length, output;

  output=name;
  for (var i=0;i<l;i++)
    output+=" | "+parameters[i];

  alert (output);
  }

test (1,2);