【问题标题】: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") 获取类对象, 但是许多 stackoverflow 响应者不喜欢使用 eval。 还有其他方法吗?

【问题讨论】:

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

标签: javascript class eval classname


【解决方案1】:

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

const className = 'myclass';

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

console.log(myclass)

【讨论】:

  • 作为应用程序程序员,我可以使用各种技巧设置数据结构来“手动”记住类与其类名之间的关联。但我希望 JS 能以与函数定义及其名称类似的方式为我做这件事。从我的帖子的回复来看,我猜不是。我可以理解为什么类名会污染全局命名空间,但肯定比函数名少。那好吧。感谢响应者证实了我对这个 JS 缺陷的担忧。
猜你喜欢
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 2017-08-08
  • 2011-10-26
  • 1970-01-01
  • 2022-08-17
  • 2013-11-22
  • 2011-02-05
相关资源
最近更新 更多