我有一个 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
相关的一些问题:
- 不当使用 eval 会使您的代码遭受注入(inject)攻击
- 调试可能更具挑战性(没有行号等)
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/