【问题标题】:Javascript - Eval a Object dynamically to change its valueJavascript - 动态评估对象以更改其值
【发布时间】:2013-11-26 23:34:48
【问题描述】:

我有一个对象名称,从 set1 到 set4,我需要在循环中使用 eval() 或窗口动态更改它们的值,下面的示例是使用 eval(),我使用了 window[] 但仍然保持不变结果,无法使用“make+set”函数成功更改对象的值。

var set1 = {desc:"111",url:"http://photo1.com"};
var set2 = {desc:"222",url:"http://photo2.com"};
var set3 = {desc:"333",url:"http://photo3.com"};
var set4 = {desc:"444",url:"http://photo4.com"};

function make_set(set,desc,url) {
     set = {};
     set.desc = url;
     set.url = url;
    return set;
}

for (var i = 1; i < 5; i++) {
    tempSet = eval("set"+i);
    tempSet = make_set(tempSet,"new description","new url");
    console.log(tempSet)
};

console.log(set1);
console.log(set2);
console.log(set3);
console.log(set4);

我已经用 make_set 函数覆盖了对象,但仍然无法使用函数成功更改值,我在函数上做错了吗?还是我错过了什么?

Object {desc: "new url", url: "new url"}
Object {desc: "new url", url: "new url"}
Object {desc: "new url", url: "new url"}
Object {desc: "new url", url: "new url"}
Object {desc: "111", url: "http://photo1.com"}
Object {desc: "222", url: "http://photo2.com"}
Object {desc: "333", url: "http://photo3.com"}
Object {desc: "444", url: "http://photo4.com"}

【问题讨论】:

  • 你为什么要这样做?使用数组。

标签: javascript loops object dynamic eval


【解决方案1】:

您正在创建一个新对象,并将 tempSet 设置为该对象,而不是修改现有集合。

for (var i = 1; i < 5; i++) {
    tempSet = eval('set' + i + ' = make_set(tempSet,"new description","new url")');
    console.log(tempSet);
};

但你真的不应该使用eval

var sets = [];
sets[0] = {desc:"111",url:"http://photo1.com"};
sets[1] = {desc:"222",url:"http://photo2.com"};
sets[2] = {desc:"333",url:"http://photo3.com"};
sets[3] = {desc:"444",url:"http://photo4.com"};

function make_set(desc, url) {
    return {desc:desc, url:url};
}

for (var i = 0; i < 4; i++) {
    sets[i] = make_set("new description","new url");
    console.log(sets[i])
};

console.log(sets[0]);
console.log(sets[1]);
console.log(sets[2]);
console.log(sets[3]);

【讨论】:

    【解决方案2】:

    删除set = {};这一行

    它正在创建一个新对象,而不是更改传入的对象。

    Live Demo

    查看“Why isn't this object being passed by reference when assigning something else to it?”的答案以获得更详细的解释。

    【讨论】:

      猜你喜欢
      • 2012-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      相关资源
      最近更新 更多