Хочу внутри метода некоего класса-обертки-фабрики создавать объекты других классов, передавая в этот метод только имя класса в виде строки.
Использую es6 классы (babel)
Сейчас есть реализация с использованием eval:
var args,
clsClass = eval(String(className)),
classObj;
args = Array.prototype.slice.call(arguments, 1);
classObj = function () {
return clsClass.apply(this, args);
};
classObj.prototype = clsClass.prototype;
return new classObj();
Затем классы кладутся в объект с ключами - имя класса и значениями - сам экземпляр класса.
Можно ли как то сделать то же самое без eval? Видел в интернете решения с window['classname'] и this['classname'], но у меня они не подходят, т.к. классы лежат внутри блока, а объекты создаются внутри метода класса-фабрики.
Или же наоборот - передавая сам объект класса получить его имя в виде строки, что бы использовать ее в кач-ве ключа. Пробовал this.constructor.name - выводит 'e', а не имя класса.