javascript - 指定 .constructor.name 为任意字符串

标签 javascript function constructor

我知道有一种方法可以使 .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/

相关文章:

javascript - TCPDF,无法在 cakephp 中包含外部 javascript 文件

javascript - 纯 Javascript end()

javascript - 在 Protractor 测试中获取和使用属性

function - 扩展 MATLAB 函数名称的最大长度

c - 函数指针和函数地址

Java,除了其中之一之外,如何阻止继承类调用特定的抽象类构造函数?

javascript - 需要有关 jQuery 单击功能的帮助

class - 在 extjs 3 上调用父类函数

未调用 C++ 构造函数

c# - 在 C# 构造函数中强制显式初始化成员