@sanex3339

Как создать объект класса с динамическим именем класса без eval?

Хочу внутри метода некоего класса-обертки-фабрики создавать объекты других классов, передавая в этот метод только имя класса в виде строки.

Использую 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', а не имя класса.
  • Вопрос задан
  • 230 просмотров
Решения вопроса 1
@sanex3339 Автор вопроса
Проблема с 'e' после this.constructor.name из за минификации, у uglify есть специальный параметр для этого дела -
--keep-fnames
Do not mangle/drop function names. Useful for code relying on Function.prototype.name.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы