如何在 JavaScript 中找出调用者函数

要找出调用者函数,请在 JavaScript 中命名一个非标准的 function.caller 属性。

Function 对象被替换为我们需要查找父函数名称的函数的名称。

function Welcome() {
  alert("caller is " + Welcome.caller);
}
Welcome();

如果Welcome函数被顶层代码调用,Welcome.caller的值为null,否则就是调用Welcome的函数。

function.caller 是一个非标准特性,不符合标准,因此避免在面向 Web 的生产站点上使用它,因为它不适用于每个用户。
但是, function.caller 是获取调用堆栈的可接受方法。

现代 JavaScript 不再支持另一种方法:

function Welcome() {
  alert("caller is " + arguments.callee.caller.toString());
}
Welcome();
function Welcome() {
   if (arguments.caller == null){   //不匹配
      console.log('我是从全局范围被调用的。');
   }else{
      console.log(arguments.caller + ' called me!');  //匹配
   }
  alert(Welcome.caller);  //Does not match
  alert(Welcome.arguments);  //Does not match
}
Welcome();

function.caller 属性替换了上面过时的arguments 对象的arguments.caller 属性。
arguments.caller 属性已过时,它用于提供调用当前正在执行的函数的函数。

虽然它可能仍然在一些主要浏览器中工作,但不建议使用它,因为它可以随时被删除。

function.caller 属性

function.caller 属性返回调用指定函数的函数。
对于严格的、生成器函数调用者和异步函数,它将返回 null。

日期:2020-06-02 22:16:18 来源:oir作者:oir