Доброго времени суток.
Возник у меня вопрос, как создать объект, имея имя класса в переменной? Есть ли аналогичная возможность, как та, что реализована в php:
$className = 'MyClass';
$newObj = new $className();
Заранее благодарю за помощь.
По наводке @Other сделал так:
"use strict";
class Maxy {
constructor() {
this.Name = undefined;
}
Render() {
console.log('Rendering...')
}
}
let Maxies = {
Mini1: class extends Maxy {
},
Mini2: class extends Maxy {
},
Mini3: class extends Maxy {
}
};
function CreateMini(Type) {
let Mini = new Maxies[Type];
return Mini.Render();
}
console.log(CreateMini('Mini2'));
Ответ
Классы, как и const, и let, не создают свойств в глобальном объекте, так что найти их по имени в переменной не выйдет.
Использование eval может помочь, но всем знакомо правило: Don't use eval!
Можно специально создать свойство (или набросать простой плагин для Babel, который сам это будет делать):
window.Test = class Test{
notify(){
console.info('Yeah!');
}
}
let name = 'Test',
app = new window[name];
app.notify();
Но, если честно, я не придумаю ситуации, где это нужно, ведь Enum-структуры нужно хранить в контейнере:
let np = {
app: class{
notify(){
console.info('Yeah!');
}
}
};
let name = 'app',
app = new np[name];
app.notify();
Комментариев нет:
Отправить комментарий