用window [string]()实例化一个类对象

时间:2019-04-11 09:23:47

标签: javascript class

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实例化对象就不再起作用。

我在这里到底想念什么?

1 个答案:

答案 0 :(得分:5)

class声明的变量的行为与用constlet声明的变量的行为类似-它们不会隐式地分配给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