Страницы

Поиск по вопросам

пятница, 14 июня 2019 г.

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

Доброго времени суток. Возник у меня вопрос, как создать объект, имея имя класса в переменной? Есть ли аналогичная возможность, как та, что реализована в 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();

Комментариев нет:

Отправить комментарий