создание объекта по строке
Господа подскажите вариант:
имеем let nameClass = 'someClass'; есть описание класса class someClass { ............................ } нужно по содержимому строки nameClass создать объект типа eval('new '+nameClass )...... eval как то не очень хочется. Есть ли какие либо другие варианты? |
Положить твои классы заранее в объект.
const classes = { SomeClass, //... }; //... new classes[nameClass](); |
так не могу. описание класса загружается динамически. все подобные классы являются производными от некоего базового класса. и подгружаются по мере действий абонента на странице. т.е. создать полный список объектов
const classes = {} - возможности нет. |
Когда подгружаешь делай в подгружаемом коде classes.SomeClass = SomeClass.
Это единственно адекватное решение. Иначе фигачь eval всё равно говнокодишь, пофиг уже. |
хотя наверное что то типа этого все таки придется сделать. можно чтобы при загрузки описания объекта заполнялся подобный массив.... в общем то это решение лучше чем eval. что то типа виртуального конструктора получили )))
Спасибо |
фишка еще в том, что заполнять данный массив classes.SomeClass = SomeClass нужно ДО загрузки скрипта. а после уже делать new. ДО загрузки еще нет описания. по идее выпадет ошибка..... капец. надо думать
|
на счет говнокода не совсем понятно - откуда такое убеждение?
|
может кому пригодится - вот получилось такое решение
1 загрузка скрипта //-первый параметр - маршрут скрипта // второй параметр - callback при успешной загрузке которому передается строка с именем загружаемого класса. this.storage.loadScript( supportedHardware[this.switchModel].path, this.loadScriptHandler.bind(this,supportedHardware[this.switchModel].class) ); 2. в самом скрипте - помимо описания класса в конце скрипта devices['Catalyst-1000'] = Catalyst-1000; - это и есть массив по которому будет создаваться (new) новый объект. 3 и callback при успешной загрузки скрипта loadScriptHandler( classDescription ){ this.switchObject = new devices[classDescription]; ................................... |
Часовой пояс GMT +3, время: 23:13. |