function getFunctionName(func) {
if(typeof func === 'function') {
const funcNameArr = /^\s*function\s*([^\(]*).*/i.exec(func.toString());
if(funcNameArr && funcNameArr[1]) {
return funcNameArr[1];
} else {
return 'anonymous';
}
} else {
throw new Error('That\'s not function');
}
}
function example(a) {
console.log('example function', a);
}
var d = () => {};
console.log(getFunctionName(example));
console.log(getFunctionName(d));
Правда с точки зрения практики, в этом особого смысла нет. Если вы конечно не собираетесь делать всякие разные проверки на имя входящей функции. Ну и изначальная конструкция с this работать не будет. Так как this это контекст функции, и он обычно не совпадает с самой функцией.