如何更改出现在 toString() 中的 Javascript 函数名称?

How to change Javascript function name that appears in toString()?

Function.name 属性 是可配置的并且可以被覆盖,但是如果我尝试

function foo() {}
Object.defineProperty(foo, 'name', {value: 'bar'})

foo.toString() 仍然显示为 "function foo() {}" 但我预计它会是 "function bar() {}".

您无法 100% 可靠地做到这一点。这是因为 Function.prototype.toString 的定义使用了 [[SourceText]] 内部插槽,它被设置为从用于创建函数的源代码创建函数。它不使用 name 属性.

您也可以尝试在函数上重写 toString,但是如果有人明确地在其上使用 Function.prototype.toString,那当然仍然会失败。