Инстанцируйте Класса динамично через переменную

Еще один способ сделать это:

  • снимок диска существующего экземпляра
  • создать новый диск из этого снимка
  • создать новый экземпляр с этот диск и дайте ему имя, которое вы хотели бы

Звучит много времени, но на самом деле это займет 5 минут.

5
задан Ryan Florence 28 May 2009 в 22:51
поделиться

3 ответа

Если функция MarioKartMenu определена в глобальной области, вы можете получить к ней доступ по ее строковому имени, используя:

window["MarioKartMenu"]

Это работает, потому что все глобальные переменные являются свойствами объект окна .

Учитывая вышеизложенное, вы можете реализовать то, что хотите, используя:

var menuConstructor = window[build.effect];
var animationClass = new menuConstructor(el, build);
5
ответ дан 14 December 2019 в 08:59
поделиться

Просто назначьте конструктор build.effect (не строку, содержащую его имя), и он должен работать:

animate = function(el, build) {
    var animationClass = new build.effect(el,build);
}
// ...

b = ...;
b.effect = MarioKartMenu;
animate(e, b);
2
ответ дан 14 December 2019 в 08:59
поделиться

Моя первая мысль - использовать оператор JavaScript eval () , хотя я понимаю, что это менее чем элегантное решение. (Что-то вроде этого: var animationClass = eval ("new" + build.effect + "(el, build)"); , хотя я не уверен, что это правильно, поскольку я не использовал eval () , как раньше. ). Ответ Аймана - гораздо лучший вариант этой идеи.

Моя вторая мысль заключается в том, что MarioKartMenu не абстрагируется надлежащим образом. Поэтому я бы построил вокруг него простой класс, который принимает имя эффекта в качестве третьего параметра и использует оператор switch () для выбора среди всех доступных эффектов, создает экземпляр правильного и возвращает его.

]
0
ответ дан 14 December 2019 в 08:59
поделиться
Другие вопросы по тегам:

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