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
我直到最近才在声明类方面切换到ES 6语法。我非常确定以前我可以实例化这样的类,但是自从我使用“类”语法以来,通过windowclassName实例化对象就不再起作用。
我在这里到底想念什么?
答案 0 :(得分:5)
用class
声明的变量的行为与用const
和let
声明的变量的行为类似-它们不会隐式地分配给window对象(这可以说是一件好事)。如果您想将Unit
放在window
上,则必须明确地这样做:
class Unit {
constructor(){
console.log('constructing');
}
}
window.Unit = Unit;
var str = "Unit";
var a = new window[str]();
您可以考虑使用自己的类对象来避免全球污染:
const myClasses = {
Unit: class Unit {
constructor(){
console.log('constructing');
}
}
};
var str = "Unit";
var a = new myClasses[str]();
在声明对象文字的过程中,对象值不能互相引用-要在myClasses
上放置一个扩展现有类之一的子类,则必须在{{1之外}}声明:
myClasses