在Javascript中是否有一个生产环境安全的Function.caller版本?

5

有没有一种方法可以返回调用当前函数的函数?Function.caller只适用于非严格模式应用程序。

我希望能够在生产环境中使用此功能,因此需要打开严格模式。

预期返回:函数本身或函数的名称。

function a() {
 b()
}

function b() {
 console.log(b.caller)
}

Function.caller 在严格模式下使用会抛出错误:

未捕获的 TypeError:'caller'、'callee' 和 'arguments' 属性不能在严格模式函数或调用它们的参数对象上访问。


请查看以下答案:https://dev59.com/hl0b5IYBdhLWcg3wIeIw#29572569 - dRoyson
2
你好奇它是用来做什么的吗? - Brad
@Royson 建议使用的答案是 error.stack,但这不是标准的写法。 - Code Maniac
@CodeManiac,你知道有没有“标准”的解决方案吗?而不必每次都将调用者名称作为参数传递? - Bart Hofland
你应该写成“production-safe version”,中间加上连字符。这是复合形容词的规则(将单词组合在一起来描述另一个单词)。 - GeneC
2个回答

8
一种可能的方法是使用Console.trace

function a() {
 b()
}

function b() {
 console.trace()
}

a()

检查浏览器控制台以查看输出


2
当我想要将数据用于其他目的而不是在控制台中显示时,我该怎么办?(既然您说“一种可能的方式”,我想应该还有其他方式吧?...) - Bart Hofland

1

在JavaScript原生中似乎没有灵活的方法来做到这一点。

当使用非标准解决方案可能是可接受的时,您可以查看Error.prototype.stack属性。您可以使用p.s.w.g答案中的方法,就像Royson在评论中建议的那样。

对于更健壮的生产环境解决方案,我认为您应该考虑使用外部包(例如stacktrace.js)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接