javascript - 实例化 JS 对象,该对象从字符串名称中获取参数数组

标签 javascript class object dynamic

我有一个 JS 类,它接受多个参数:

var MyClassName = 函数(arg1, arg2, arg3){ //做东西 };

我有一个代表类名称的字符串和一个参数数组。

var class = "MyClassName"
var args = ["1", "2", "3"]

使用类名的字符串和参数数组,如何实例化该类?原型(prototype)绑定(bind)/应用似乎有一些相关性,但我不太清楚这一切是如何协同工作的。我也尝试过使用 window["MyClassName"],但这会引发未定义的错误。有什么建议吗?

最佳答案

您可以使用eval:

var a = eval("new " + className + " ( " + arguments.toString() + ")");

示例:

JSFIDDLE:https://jsfiddle.net/s40ave7r/

function A(a1,a2,a3) {
    this.a1 = a1;
    this.a2 = a2;
    this.a3 = a3;
}

var className = "A";
var arguments = [1,2,3];

var a = eval("new " + className + " ( " + arguments.toString() + ")");

console.log(a); // A {a1:1, a2:2, a3:3}

注意:

一般来说,使用eval是一个坏主意。如果你能尽量避免的话。这些是与eval相关的一些问题:

  1. 不当使用 eval 会使您的代码遭受注入(inject)攻击
  2. 调试可能更具挑战性(没有行号等)
  3. eval的代码执行速度更慢(没有机会编译/缓存 评估代码)

解决方案2

其他解决方案是将类定义附加到对象。例如,当您在全局范围内定义一个类时,该类默认附加到浏览器中的 window 对象,或附加到节点中的 global 对象。所以你可以这样做:

浏览器

function MyClass() {}
new window["MyClass"](arg1, arg2..);

节点

function MyClass() {}
new window["MyClass"](arg1, arg2..);

关于javascript - 实例化 JS 对象,该对象从字符串名称中获取参数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30584863/

相关文章:

php - 为什么 PHP 不禁止我使用 Heredoc 语法初始化类属性?

javascript - 使用嵌套对象内的键/值对对象数组进行排序

javascript - 将不相同的对象添加到数组中

javascript - 使用 javascript 将变量添加到表单发布 URL

javascript - 关于可能的 mysql 和 php 功能(也许是 javascript?)的两个问题,以及我应该在哪里了解更多信息

javascript - 防止列表项内的div向上滑动

php - __autoload($class) 不工作?找不到类错误

python - 我不明白为什么我会收到 AttributeError

javascript - jQuery 内容面板切换器阻止访问表单元素

java - 在 java 中传递对象时到底发生了什么?