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
定义,或者要求代码显式注册或导出所需的类。就个人而言,我喜欢模块,因此我建议您将格式更改为模块格式,并要求代码编写器以商定的导出格式导出类。模块格式还可以将所有内容放在私有范围内,并防止名称冲突。