JS6, браузер
Как создать экземпляр класса по его имени строки? Например, у меня есть строка Foo
и мне нужно создать экземпляр класса Foo
. Я не хочу писать такую конструкцию:
let className = getClassName(); // returns 'Foo', 'Stuff' or other
...
let item = null;
if('Foo' == className){
item = new Foo();
}
else if('Stuff' == className){
item = new Stuff();
}
UPD
Я пытаюсь получить доступ к моему конструктору классов через объект window
но у меня есть проблема: он возвращает undefined
. Но мой класс существует, и браузер знает это:
То, что вы пытаетесь сделать, - это то, что вы должны делать, на мой взгляд. Это стандартный способ создания объектов, когда тип объекта известен во время выполнения и называется шаблоном Factory Method.
Вы должны избегать дублирования этого везде в своем коде, используя фабричный объект, который инкапсулирует создание объекта. Этот заводский объект будет иметь метод, который будет использовать имя типа в качестве его параметра.
Используйте Google: создайте объект JavaScript с помощью строки для определения имени класса.
var myObject = window[classNameString];
PS Я скопировал ваш заголовок вопроса и добавил javascript впереди.
UPD
. Посмотри, пожалуйста.
new window['className']()
если оно работает в контексте браузера.