如何在运行时动态创建新的 Javascript 对象,仅给定它们的类名



假设有一些小部件:

function Widget1(initData) {
        ....
} 
Widget1.prototype.render = function() {
    ....
}

function Widget2(initData) {
    ....
}  
Widget2.prototype.render = function() {
    ....
}

我需要做的是:

$.subscribe('/launch', function(widgetName, initData) {
    // create a new object of the widget and then call the render method
});

我不想写多个 if-else 块,因为小部件的数量可能会变得非常大。一种选择是使用 eval((,但我相信可能有更好的技术。我使用的是 JQuery 框架,所以不想包含任何其他可能具有特定功能来支持此功能的框架。一个纯粹的Javascript解决方案将不胜感激。

是的,有一种方法。创建函数时,该函数将创建为该上下文中this对象的属性。因此,如果在全局范围内声明这些 Widget 函数,它们将成为 window 对象的属性。您可能知道,您可以以object.propertyobject['property']的身份访问属性。因此,如果它们是全局的,您可以执行以下操作:

$.subscribe('/launch', function(widgetName, initData) {
    var widget = new window[widgetName](initData);
});

编辑:正如T.J. Crowder所说,我大错特错了。我所说的关于创建为this属性的函数适用于您在全局范围内的情况(我想说"仅当您在全局范围内时",但由于我不是 100% 确定我会保留它(。

正如Esalijia的评论所说:

$.subscribe('/launch', function(widgetName, initData) {
    // create a new object of the widget and then call the render method
    widget = new window[widgetName]();
});

或者,您可以使用.bind() bind定义Widget*的范围,并使其可用于$.subscribe方法。

相关内容

  • 没有找到相关文章

最新更新