我知道有一种方法可以使.constructor.name
与构造函数存储在其中的变量不同
var Foo = function Bar() {};
console.log(new Foo().constructor.name) // => Bar
我想知道是否存在一种将对象的.constructor.name
设置为不是有效JS函数名称(例如, "Hello::World"
。
直接设置似乎无效:
function Foo() {};
Foo.prototype.constructor.name = "Test"
console.log(new Foo().constructor.name) // => Foo
我尝试使用Function
构造函数来执行此操作,但是它使用eval
,因此JS尽管传递了字符串也必须有效。
答案 0 :(得分:4)
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