问题
I need the current function name as a string to log to our log facility. But arguments.callee.name
only works in loose mode. How to get the function name under "use strict"
?
回答1:
For logging/debugging purposes, you can create a new Error
object in the logger and inspect its .stack
property, e.g.
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');
});
回答2:
You can bind function as its context then you can access its name via this.name
property:
function x(){
console.log(this.name);
}
x.bind(x)();
回答3:
After little research here is a good solution :
function getFnName(fn) {
var f = typeof fn == 'function';
var s = f && ((fn.name && ['', fn.name]) || fn.toString().match(/function ([^\(]+)/));
return (!f && 'not a function') || (s && s[1] || 'anonymous');
}
function test(){
console.log(getFnName(this));
}
test = test.bind(test);
test(); // 'test'
Source : https://gist.github.com/dfkaye/6384439
来源:https://stackoverflow.com/questions/38435450/get-current-function-name-in-strict-mode