给定一个类名,我如何获取它的类对象?

Posted

技术标签:

【中文标题】给定一个类名,我如何获取它的类对象?【英文标题】:Given a class name, how do I get its class object? 【发布时间】:2021-11-12 18:36:01 【问题描述】:

在我评估之后: class myclass, 我想得到那个类对象,给定它的名字。 当你评估: function myfn() 你可以做: window.myfnglobalThis["myfn"] 获取函数对象。 但是对于获取类对象,这是行不通的。 我可以: eval("myclass") 获取类对象, 但是许多 *** 响应者不喜欢使用 eval。 还有其他方法吗?

【问题讨论】:

您可以创建一个对象并使用类表达式添加它:classes['myclass'] = class ,这样可以避免类似eval的代码 "在我评估后:class myclass" - 你为什么首先使用eval?但是,如果它在您的用例中确实有意义,那么 eval("myclass") 也同样适用。 【参考方案1】:

您可以使用Function() constructor 创建一个新类并将该值分配给一个全局变量:

const className = 'myclass';

window[className] = new Function(`class $className; return $className`)()

console.log(myclass)

【讨论】:

作为应用程序程序员,我可以使用各种技巧设置数据结构来“手动”记住类与其类名之间的关联。但我希望 JS 能以与函数定义及其名称类似的方式为我做这件事。从我的帖子的回复来看,我猜不是。我可以理解为什么类名会污染全局命名空间,但肯定比函数名少。那好吧。感谢响应者证实了我对这个 JS 缺陷的担忧。

以上是关于给定一个类名,我如何获取它的类对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取对象的非限定(短)类名?

如何从属性内部获取类名(这又是某种类型的对象)

如何使用包含类名的字符串获取 Class 对象? [关闭]

Class.getName()对给定的类做了什么?

获取所有实现给定接口的类

如何将完全限定的类名映射到 Python 中的类对象?