要找出调用者函数,请在 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