【问题标题】:Running Eval within Nested For Loops在嵌套的 For 循环中运行 Eval
【发布时间】:2014-08-19 22:41:21
【问题描述】:

我正在尝试在嵌套的 for 循环中运行 eval 函数。例如,在下面的代码中,要获取 item2.length,item2[x].create() 必须与 eval 一起运行。 create 是我编写的自定义功能。它在我在控制台中测试时起作用。我知道使用 eval 有很多污名。但请忽略这种情况。我只想知道为什么 eval 不能在嵌套的 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()");
                    }
                }
            }

【问题讨论】:

  • 你为什么认为你需要使用eval
  • 我了解 eval 的风险。但这让这里变得更容易。请忽略评估风险。
  • 为什么会更容易? eval("item2[x].create()"); 做了哪些 item2[x].create(); 没有做的事情?
  • 你是对的......我已经删除了评估,做同样的事情。但同样的问题仍然存在。加载所有内容后,我可以在控制台中获取 .length 值。但是对于 y 仍然不确定
  • 您混淆了item1item2。 (你所有的变量名都是一对一的。)

标签: javascript jquery loops for-loop eval


【解决方案1】:

您对create 函数的使用不正确。你确定你甚至可以得到嵌套 1 级的 item2[x] 的长度吗?

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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 2015-01-28
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2016-02-07
    相关资源
    最近更新 更多