javascript - 如何仅在给定类名的情况下在运行时动态创建新的 Javascript 对象?

标签 javascript oop reflection

假设有一些小部件:

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 block ,因为小部件的数量可能会变得非常大。一种选择是使用 eval(),但我相信可能有更好的技术。我正在使用 JQuery 框架,所以不想包含任何其他可能具有支持此功能的特定功能的框架。纯 Javascript 解决方案将不胜感激。

最佳答案

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

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

编辑:作为 T.J.克劳德说,我大错特错了。我所说的关于作为 this 的属性创建的函数适用于您在全局范围内时(我想说“仅当您在全局范围内时”,但因为我'我不是 100% 确定我会保留它)。

关于javascript - 如何仅在给定类名的情况下在运行时动态创建新的 Javascript 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8731956/

相关文章:

javascript - <select> getter-setter 以字符串形式接收对象参数

javascript - 对 JSON 数组对象进行排序

javascript - 在 Emscripten 中使用 Boost

php - 尝试将 mysqli_real_escape_string 与 OOP 连接属性一起使用,但它发出警告

java - Guice - 使用两种不同的实现注入(inject)对象

Java反射getMethod给出异常

reflection - 如何在 Java 内部使用 Java 9 的反射?

javascript - GMap 中的标记数组

PHP OOP 数据库设计

java - 如何迭代类成员?