首页 > 解决方案 > 如何更改出现在 toString() 中的 Javascript 函数名称?

问题描述

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

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

foo.toString()仍然显示为,"function foo() {}"但我希望它是"function bar() {}"

标签: javascriptgoogle-chromefirefox

解决方案


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

您也可以尝试覆盖toString该函数,但当然,如果有人明确使用它,那仍然会失败Function.prototype.toString


推荐阅读