La propiedad Function.name es configurable y se puede anular, pero si lo intento
function foo() {} Object.defineProperty(foo, 'name', {value: 'bar'}) foo.toString() todavía aparece como "function foo() {}" pero esperaba que fuera "function bar() {}" .
No se puede hacer esto 100% fiable. Eso se debe a la definición de Function.prototype.toString , que usa la ranura interna [[SourceText]], que se establece cuando la función se crea a partir del código fuente que se usó para crear la función. No utiliza la propiedad de name .
También podría intentar anular toString en la función, pero, por supuesto, eso fallaría si alguien usara explícitamente Function.prototype.toString en ella.