arguments.callee
不幸已经被弃用,在"严格模式"下使用它会抛出错误。是否有新的适当(标准)的替代方法来获取实际函数中的函数名?或者在将来的ECMA6、ECMA7计划中会有吗?
最近的答案只是一种不可接受的脏方式。
arguments.callee.caller.name
也无法工作(nodejs v7.5.0)。arguments.callee
不幸已经被弃用,在"严格模式"下使用它会抛出错误。arguments.callee.caller.name
也无法工作(nodejs v7.5.0)。有没有新的适合在实际函数内获取函数名称的标准替代方法?
没有。
或者将来的 ES 计划中是否会有这个功能?
不会,因为没有必要。在当前函数内部,您知道名称并且可以使用字符串字面量,而在其他函数中,您只需要一些引用(但不是.callee)。
callees()[0]
以获取其名称。我只对它进行了一些基本测试:function callees(){return(new Error())。stack.split(/ \ n /)。slice(2)。map(s => s.replace(/ ^ \ s + at \ s +(\ <?[\w.]+\>?)。* /,'$ 1'))}
- omninonsensevar callerId = require('caller-id');
function foo() {
bar();
}
function bar() {
var callerName = callerId.getData().functionName; /* 'foo' */
}
.name
吗?例子很重要。 - loganfsmyth