动态调用javascript中的类似对象?

时间:2015-08-07 17:42:18

标签: javascript variables object

我提前为标题道歉,但我不知道如何说出我想要问的内容(如果以前问过类似的问题,我就不知道如何搜索它)。 所以我的程序中有四个非常相似的对象,因此我将它们区分开来:

var person1Object = {
    foo: [],
    bar: []
}
var person2Object = {
    foo: [],
    bar: []
}
var person3Object = {
    foo: [],
    bar: []
}
var person4Object = {
    foo: [],
    bar: []

以及按下按钮时通过另一个函数计数1到4的变量,如下所示:

var count = 1;
function count() {
    if (count < 4) {
        i++;
    } else {
        i = 1;
    }
}
$("#button").on("click", function () { count(); });

我正在尝试做一些看起来像这样的事情:

person+count+Object.foo.push("some value");
person+count+Object.bar.push("some other value");

但是当我这样做时,控制台说(我假设这是正确的)person is not defined

我尝试过像这样使用数组:

var personObject = [person1Object, person2Object, person3Object, person4Object]
personObject[count].foo.push("some value");

但这也不起作用。另外,如果可以,我想避免if语句。

如果不使用一堆if语句,我将如何操作这些对象?

3 个答案:

答案 0 :(得分:0)

您可以通过窗口对象(无论如何在浏览器中)访问具有动态名称的对象。

所以这样的事情应该有效:

window['person'+count+'Object'].foo.push("some value");
window['person'+count+'Object'].bar.push("some other value");

如果您需要在节点中执行此操作,您可以执行相同的操作,但请使用global,因此:

global['person'+count+'Object'].foo.push("some value");
global['person'+count+'Object'].bar.push("some other value");

答案 1 :(得分:0)

为什么不使用简单的数组? (它从0到4)

&#13;
&#13;
var person = Array.apply(null, { length: 4 }).map(function () {
    return {
        foo: [],
        bar: []
    };
});

//access
person[1].foo.push(42);
document.getElementById('out').innerHTML = JSON.stringify(person, null, 4);
&#13;
<pre id="out"></pre>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

第一种方法失败,因为你需要知道范围并用字符串来代替它。我假设这个代码是在浏览器和顶级推出的。它应该看起来像

for(var i=0; i < 4; i++){
   window['person'+i+'Object'].foo.push("some value");
}

但是这不好,因为它依赖于window,你无法将代码移动到某个函数中,也无法更改名称。

第二种方法是正确的方法。即将类似的对象放入数组中以在循环中处理它们。遇到的问题是由同一个函数名和变量引起的。名称变量index并将起作用