Как создать класс, если имя его приходит строкой?

Допустим есть у меня различные классы: Test, Conf, Stat и тд...

Мне приходит строка 'test' или 'conf' ... 'strN'

Как мне создать экземпляр класса?

class Test{
  constructor(){
    this.a = 1;
  }
}
const class_name = 'Test';
const _class = new class_name() //не работает, так как говорит строка не функция
const __class = eval(`new ${class_name}()`) // работает, но такой подход мне не нравится

в PHP так работает, а вот в JS что-то пока не нашел варианта как реализовать такое.

P.S. есть вариант использовать eval(), но чет не вызывает доверия


Ответы (1 шт):

Автор решения: Qwertiy

class Test { constructor() { this.x = 1 } }
class Conf { constructor() { this.x = 2 } }
class Stat { constructor() { this.x = 3 } }

var map = {
  test: Test,
  conf: Conf,
  stat: Stat,
}

var name = 'conf'
var obj = new map[name]()
console.log(obj)

→ Ссылка