Да, есть способ. Когда вы создаете функцию, она создается как свойство объекта this
в этом контексте. Поэтому, если вы объявляете эти функции виджетов в глобальной области видимости, они становятся свойствами объекта window
. Как вы, вероятно, знаете, вы можете получить доступ к свойству как object.property
или object['property']
. Так что, если они глобальные, вы можете сделать что-то вроде:
$.subscribe('/launch', function(widgetName, initData) {
var widget = new window[widgetName](initData);
});
РЕДАКТИРОВАТЬ: Как T.J. Краудер сказал, я был ужасно неправ. То, что я сказал о функции, создаваемой как свойство this
, применимо, когда вы находитесь в глобальной области действия (я хочу сказать, «только когда вы находитесь в глобальной области действия», но поскольку я не уверен на 100% Я оставлю это так).