在嵌套的循环中运行Eval

时间:2014-08-19 22:41:21

标签: javascript jquery loops for-loop eval

我正在尝试在嵌套for循环中运行eval函数。例如,在下面的代码中,要获取item2.length,必须使用eval运行item2 [x] .create()。创建是我编写的自定义功能。它在我在控制台中测试时有效。我知道使用eval有很多耻辱感。但是对于这种情况请不要理会。我只是想知道为什么evals不能在嵌套for循环中工作。

当我运行代码时,它会抛出一个错误,它无法获得item2 [x]的长度。但是当我在控制台中测试item2 [x]的长度时,它给出了正确的长度。为什么我的代码运行不正常?似乎嵌套循环在第一个eval完成之前运行。请指教。

            for (var x = 0; x < item1.length; x++) {
                eval("item2[x].create()");
                for (var y = 0; y < item2[x].length; y++) {
                    eval("item3[x][y].create()");
                    for (var z = 0; z < item3[x][y].length; z++) {
                        eval("item4[x][y][z].create()");
                    }
                }
            }

1 个答案:

答案 0 :(得分:0)

您对create功能的使用不正确。你确定你甚至能够得到item2 [x]嵌套1级深度的长度吗?

Object.create函数需要一个参数,该参数构成正在创建的新对象的原型。一个简单的例子如下:

var parentObj = {
    value: 1, 
    getValue: function(){
        return this.value;
    }
};
var childObj = Object.create(parentObj);

如果您对继承现有原型不感兴趣,可以传递null作为原型:

var myObj = Object.create(null);

或者,您可以使用new

var testObj = function(){
    this.value = 1;
    this.getValue = function(){
        return this.value;
    };
};
var myObj = new testObj();