class Unit {
constructor(){
}
}
var str = "Unit";
var a = new window[str](); // error
var b = new window["Unit"](); // error
var u = new Unit(); // works
(u instanceof Unit) // true
Run Code Online (Sandbox Code Playgroud)
我只是最近才在声明类方面切换到ES 6语法。我非常确定以前我可以实例化这样的类,但是自从我使用“类”语法以来,通过windowclassName实例化对象就不再起作用了。
我到底在这里想念什么?
用声明的变量的class行为与用const和声明的变量的行为类似let-它们不会隐式分配给window对象(这可以说是一件好事)。如果你想放Unit的window,你就必须这样做明确:
class Unit {
constructor(){
console.log('constructing');
}
}
window.Unit = Unit;
var str = "Unit";
var a = new window[str]();Run Code Online (Sandbox Code Playgroud)
您可以考虑使用自己的类对象来避免全球污染:
const myClasses = {
Unit: class Unit {
constructor(){
console.log('constructing');
}
}
};
var str = "Unit";
var a = new myClasses[str]();Run Code Online (Sandbox Code Playgroud)
在声明对象文字的过程中,对象值不能相互引用-要在子类上myClasses扩展现有类之一,则必须在myClasses声明之外进行操作:
const myClasses = {
Unit: class Unit {
constructor(){
console.log('constructing');
}
}
};
myClasses.Child = class Child extends myClasses.Unit {
constructor() {
super();
console.log('Child running');
}
}
var str = "Child";
var a = new myClasses[str]();Run Code Online (Sandbox Code Playgroud)