动态调用javascript中的类似对象?
我提前为标题道歉,但我不知道如何表达我想问的问题(如果以前有人问过类似的问题,我就不知道如何搜索它)。 因此,我的程序中有四个非常相似的对象,因此我将它们区分为:动态调用javascript中的类似对象?,javascript,variables,object,Javascript,Variables,Object,我提前为标题道歉,但我不知道如何表达我想问的问题(如果以前有人问过类似的问题,我就不知道如何搜索它)。 因此,我的程序中有四个非常相似的对象,因此我将它们区分为: var person1Object = { foo: [], bar: [] } var person2Object = { foo: [], bar: [] } var person3Object = { foo: [], bar: [] } var person4Object = {
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没有定义
我尝试过使用这样的数组:
var personObject = [person1Object, person2Object, person3Object, person4Object]
personObject[count].foo.push("some value");
但这也不起作用。此外,如果可以的话,我希望避免使用if语句
如果不使用一堆if语句,我如何操作这些对象?您可以通过窗口对象(无论如何,在浏览器中)访问具有动态名称的对象 因此,类似这样的方法应该有效:
window['person'+count+'Object'].foo.push("some value");
window['person'+count+'Object'].bar.push("some other value");
如果需要在node中执行此操作,您也可以执行相同的操作,但可以使用global
,因此:
global['person'+count+'Object'].foo.push("some value");
global['person'+count+'Object'].bar.push("some other value");
您可以通过窗口对象(无论如何,在浏览器中)访问具有动态名称的对象 因此,类似这样的方法应该有效:
window['person'+count+'Object'].foo.push("some value");
window['person'+count+'Object'].bar.push("some other value");
如果需要在node中执行此操作,您也可以执行相同的操作,但可以使用global
,因此:
global['person'+count+'Object'].foo.push("some value");
global['person'+count+'Object'].bar.push("some other value");
为什么不使用一个简单的数组呢?(从0到4运行)
var person=Array.apply(null,{length:4}).map(函数(){
返回{
foo:[],
酒吧:[]
};
});
//通路
人[1].foo.push(42);
document.getElementById('out').innerHTML=JSON.stringify(person,null,4)代码>
为什么不使用简单数组?(从0到4运行)
var person=Array.apply(null,{length:4}).map(函数(){
返回{
foo:[],
酒吧:[]
};
});
//通路
人[1].foo.push(42);
document.getElementById('out').innerHTML=JSON.stringify(person,null,4)代码>
第一种方法失败,因为您需要知道作用域,并用字符串代替。我假设这段代码是在浏览器和顶层启动的。应该是这样的
for(var i=0; i < 4; i++){
window['person'+i+'Object'].foo.push("some value");
}
for(变量i=0;i<4;i++){
window['person'+i+'Object'].foo.push(“某些值”);
}
但是这并不好,因为它依赖于窗口
,您不能将代码移动到某些函数中,也不能更改名称
第二种方法是正确的做法。也就是说,将相似的对象放入数组中,以循环方式处理它们。遇到的问题是由函数和变量的名称相同引起的。Name变量索引
将起作用第一种方法失败,因为您需要知道范围,并用字符串代替它。我假设这段代码是在浏览器和顶层启动的。应该是这样的
for(var i=0; i < 4; i++){
window['person'+i+'Object'].foo.push("some value");
}
for(变量i=0;i<4;i++){
window['person'+i+'Object'].foo.push(“某些值”);
}
但是这并不好,因为它依赖于窗口
,您不能将代码移动到某些函数中,也不能更改名称
第二种方法是正确的做法。也就是说,将相似的对象放入数组中,以循环方式处理它们。遇到的问题是由函数和变量的名称相同引起的。Name变量索引
并将起作用这对我很有效。非常感谢。我担心我需要添加一堆if语句,但这解决了我的问题这对我来说很有效。非常感谢。我担心我需要添加一堆if语句,但这解决了我的问题我尝试使用数组,但由于某些原因它对我无效我尝试使用数组,但由于某些原因它对我无效