Javascript 如何从类名中获取ES6类构造函数?

Javascript 如何从类名中获取ES6类构造函数?,javascript,ecmascript-6,reflection,Javascript,Ecmascript 6,Reflection,给定以下代码: class MyClass {} 有没有办法从字符串MyClass中获取MyClass构造函数?我正在寻找类似.NET的东西 用例: 产品的用户通过某种可扩展性编写自己的类;当产品被赋予给定类的名称时,这些类应该能够由产品从全局范围加载 我知道,在大多数情况下,这可能是一种糟糕的设计模式,缺乏封装,但尽管如此,我还是很好奇这种类型的反射是否在任何ECMAScript版本中都可以实现。我解决这个问题的方法是让每个类使用主产品中的帮助函数(或类装饰器!)来“注册”自己 p.S. 我

给定以下代码:

class MyClass {}
有没有办法从字符串
MyClass
中获取
MyClass
构造函数?我正在寻找类似.NET的东西

用例:

产品的用户通过某种可扩展性编写自己的类;当产品被赋予给定类的名称时,这些类应该能够由产品从全局范围加载

我知道,在大多数情况下,这可能是一种糟糕的设计模式,缺乏封装,但尽管如此,我还是很好奇这种类型的反射是否在任何ECMAScript版本中都可以实现。我解决这个问题的方法是让每个类使用主产品中的帮助函数(或类装饰器!)来“注册”自己

p.S.

我注意到,虽然函数声明会改变全局范围,但类定义不会:

function hohere(){}
globalThis[“heree”]//heree(){}
类{}
globalThis[“Heree”]//未定义

不一定,因为在JS中,类定义只是另一个存储某些值的变量。因此,您也可以编写
constfoo=class Bar{}
。猜猜现在的“名称”是什么。如果要执行
window.heree=class heree{}
操作,您可以使用
global访问它,就像在第一个示例中一样,无需亲自解析代码以查找
class
定义,或者要求代码显式注册或导出所需的类。就个人而言,我喜欢模块,因此我建议您将格式更改为模块格式,并要求代码编写器以商定的导出格式导出类。模块格式还可以将所有内容放在私有范围内,并防止名称冲突。