给定一个类名,我如何获取它的类对象?
Posted
技术标签:
【中文标题】给定一个类名,我如何获取它的类对象?【英文标题】:Given a class name, how do I get its class object? 【发布时间】:2021-11-12 18:36:01 【问题描述】:在我评估之后:
class myclass
,
我想得到那个类对象,给定它的名字。
当你评估:
function myfn()
你可以做:
window.myfn
和
globalThis["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 缺陷的担忧。以上是关于给定一个类名,我如何获取它的类对象?的主要内容,如果未能解决你的问题,请参考以下文章