如何更改出现在 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
,那当然仍然会失败。
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
,那当然仍然会失败。