我正在尝试使用 eval(string)
动态创建对象。我一直无法找到使用 eval
或至少我能理解的东西的替代方法。
我循环遍历如下代码,字符串随机变化,为包含对象定义的字符串数组选取。
llista[dia] = eval('new Accident_mortal("EP-8", 17, "accident helicopter", 1, 2, 0)');
从我所读到的所有内容来看,使用 eval
是一件坏事,但我想不出还有什么办法可以做到这一点。
编辑
我认为 Lolo 的代码是我需要的,我可以执行以下操作吗?
var o = [
{ clazz1: 'Accident_mortal', args: ["EP-8", 17, "accident helicopter", 1, 2, 0] },
{ clazz2: 'Accident_mortal', args: ["B45", 101, "accident camio", 4, 3, 1] },
{ clazz3: 'Accident_mortal', args: ["C19", 234, "accident tot terreny", 2, 1, 1] }
}
var o里面最多9个对象,然后用他提出的代码从这9个定义中生成随机对象。
最佳答案
如果你可以用对象数组替换字符串数组,那么你可以试试这个:
function construct(constructor, args) {
function F() {
return constructor.apply(this, args);
}
F.prototype = constructor.prototype;
return new F();
}
// objects definitions
var o = [
{ clazz: 'Accident_mortal', args: ["EP-8", 17, "accident helicopter", 1, 2, 0] }
]
// create objects
for (var i = 0; i < o.length; ++i) {
var x = construct(window[o[i].clazz], o[i].args);
}
关于javascript - 动态创建对象,eval 的替代方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8281733/