Как создать экземпляр класса по его строковому имени? Я попытался использовать `window` и для этих целей. [Дубликат]

1

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. Но мой класс существует, и браузер знает это:

Изображение 174551

  • 0
    это браузер javascript или nodejs?
  • 0
    Попробуйте new window['className']() если оно работает в контексте браузера.
Показать ещё 2 комментария
Теги:

2 ответа

1

То, что вы пытаетесь сделать, - это то, что вы должны делать, на мой взгляд. Это стандартный способ создания объектов, когда тип объекта известен во время выполнения и называется шаблоном Factory Method.

Вы должны избегать дублирования этого везде в своем коде, используя фабричный объект, который инкапсулирует создание объекта. Этот заводский объект будет иметь метод, который будет использовать имя типа в качестве его параметра.

0

Используйте Google: создайте объект JavaScript с помощью строки для определения имени класса.

var myObject = window[classNameString];

PS Я скопировал ваш заголовок вопроса и добавил javascript впереди.

  • 1
    Не отвечайте на дубликаты, отметьте их как дубликаты.
  • 0
    Я добавил раздел UPD . Посмотри, пожалуйста.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню