在严格模式下获取当前函数名称

exe*_*ook 16 javascript strict

我需要当前函数名作为字符串来登录我们的日志工具.但arguments.callee.name只能在松散模式下工作.如何获取功能名称"use strict"

geo*_*org 31

为了记录/调试目的,您可以Error在记录器中创建一个新对象并检查其.stack属性,例如

function logIt(message) {
    var stack = new Error().stack,
        caller = stack.split('\n')[2].trim();
    console.log(caller + ":" + message);
}

function a(b) {
    b()
}

a(function xyz() {
    logIt('hello');
});
Run Code Online (Sandbox Code Playgroud)

  • @hamism:`stack [2]`总是调用记录器的函数,无论堆栈有多深. (3认同)
  • 这是记录/调试的巧妙解决方案。对于考虑在生产代码中使用它的其他人(在我的情况下,用于事件跟踪),请注意:*“此功能是非标准的,不在标准轨道上。不要在面向 Web 的生产站点上使用它:它不会对每个用户都有效。实现之间也可能存在很大的不兼容性,未来可能会改变行为。”* (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ Global_Objects/错误/堆栈) (2认同)

LJ *_*ski 6

您可以将函数绑定为其上下文,然后您可以通过this.name属性访问其名称:

function x(){
  console.log(this.name);
}
x.bind(x)();
Run Code Online (Sandbox Code Playgroud)