Javascript 动态创建对象,什么';什么是评估的替代方案?

Javascript 动态创建对象,什么';什么是评估的替代方案?,javascript,eval,Javascript,Eval,我正在尝试使用eval(string)动态创建对象。我一直无法找到一种替代方法来使用eval或至少是我能理解的东西 我正在遍历如下代码,字符串随机变化,为包含对象定义的字符串数组拾取 llista[dia] = eval('new Accident_mortal("EP-8", 17, "accident helicopter", 1, 2, 0)'); 从我所读到的内容来看,使用eval是一件坏事,但我不知道我还能怎么做 编辑 我想Lolo的代码就是我所需要的,我可以做以下事情吗 var o

我正在尝试使用
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个定义中生成随机对象。

另一种方法,虽然不一定是一种改进,但可以创建
函数
构造函数来计算字符串,并返回新对象

llista[dia] = eval('new Accident_mortal("EP-8", 17, "accident helicopter", 1, 2, 0)');
//                    |---create a new Function
llista[dia] = (new Function( 'return ' + my_string_array[0] ))();
//                   invoke the new Function-------------------|
但是,如果您需要不止一次地
eval
这些字符串中的任何一个,这可能会被证明是可取的

您可以使用新函数覆盖数组的每个成员

for( var i = 0; i < my_string_array; ++i ) {
    my_string_array[ i ] = new Function( 'return ' + my_string_array[ i ] );
}

最终,最好的解决方案是不必处理需要计算为代码的字符串。如果这是不可避免的,那么您的选项是有限的。

如果您可以用对象数组替换字符串数组,那么您可以尝试以下方法:

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);
}
函数构造(构造函数、参数){
函数F(){
返回构造函数。应用(此参数为args);
}
F.prototype=constructor.prototype;
返回新的F();
}
//对象定义
变量o=[
{clazz:“意外死亡”,args:[“EP-8”,17,“意外直升机”,1,2,0]}
]
//创建对象
对于(变量i=0;i
解决方案在于如何获取数据。为什么要将代码提取为字符串?另一种选择是使用“what”作为输入?您从什么开始?换句话说,字符串本身从何而来?您可以直接使用创建对象的方式,而不是将其置于eval下,除非您不是从其他地方动态获取类名/函数名(如javascript中的那样)……这是练习使用对象和继承的练习。我用9个不同的字符串创建了一个数组,然后我用这个数组创建了100个对象,使用Math.random()来提取新对象的字符串。我对Javascript的知识非常有限,但字符串似乎是最简单的方法,我只是不知道其他方法:)