我知道有一种方法可以使 .constructor.name
与存储构造函数的变量不同
var Foo = function Bar() {};
console.log(new Foo().constructor.name) // => Bar
我想知道是否有一种 hacky 方法可以将对象的 .constructor.name
设置为不是有效 JS 函数名称的名称,例如“Hello::World”
。
直接设置好像不行:
function Foo() {};
Foo.prototype.constructor.name = "Test"
console.log(new Foo().constructor.name) // => Foo
我尝试使用 Function
构造函数执行此操作,但使用 eval
,因此尽管传递了字符串,JS 也必须有效。
最佳答案
prototype.constructor.name
被定义为不可写,这意味着您不能仅通过赋值来更改它。
var Foo = function Bar() {};
console.log(Object.getOwnPropertyDescriptor(Foo.prototype.constructor, 'name'))
但是,正如您所看到的,它是可配置的,这意味着您可以重新定义它。我不知道这是否明智,但你可以这样做:
var Foo = function Bar() {};
Object.defineProperty(Foo.prototype.constructor, 'name', {value: "Test"})
console.log(new Foo().constructor.name) // Test
关于javascript - 指定 .constructor.name 为任意字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55480884/