Javascript 如何动态指示类?

Javascript 如何动态指示类?,javascript,ecmascript-6,es6-class,Javascript,Ecmascript 6,Es6 Class,我有一个类和一个函数,如下所示: class A {} function B {} new window["B"] 我需要以类似于Java的class.forName()的方式动态实例化它们 我可以按如下方式实例化该函数: class A {} function B {} new window["B"] 然而 window["A"] === undefined 为什么不同?类不仅仅是函数的语法糖吗?“类不仅仅是函数的语法糖

我有一个类和一个函数,如下所示:

class A {} 
function B {}
new window["B"]
我需要以类似于Java的
class.forName()
的方式动态实例化它们

我可以按如下方式实例化该函数:

class A {} 
function B {}
new window["B"]
然而

window["A"] === undefined

为什么不同?类不仅仅是函数的语法糖吗?

“类不仅仅是函数的语法糖吗?”它们大多是。但这里您看到的是来自ES6的新范围规则。任何
let
const
class
声明都不会自动添加到全局对象中。因此,您无法从那里获得
A
。这类似于拥有
const C=function(){}
。但是,如果没有
new
,就不能调用完全相同的类构造函数。无论如何,如果您需要,只需使用一个对象或一个映射并将您的类放在那里。然后,您可以通过字符串获取它们。同样相关:因此,即使A在我的范围内(定义了A),我也不能再通过字符串计算“A”<代码>当前范围中存在一个。这也恰好是全局范围。但是,它不会添加到全局对象中,全局对象是浏览器的
窗口
。这是ES6设计的一部分,旨在减少全球污染和名称冲突。你也可以只做
window.A=classa{}
,但我真的建议不要这样做。如果您需要一个对象作为注册表,那么只需使用一个对象作为注册表。但是最好使用您自己的对象,而不是污染
窗口
对象。