2012-10-10 120 views
11

可能重复:
javascript - dynamic variables
Dynamic Javascript variable names我可以在JavaScript中创建动态对象名称吗?

我需要创建一些页面上的对象,并希望按顺序命名。有没有办法在JavaScript中做到这一点?

for (i=0;i<num;i++){ 
    var obj+i = new myObject("param1","param2"); 
    obj+i.someProperty = value; 
} 

这样我可以动态地创建不同数量的对象(依赖于值“NUM”),然后适当地设定它们的属性。

我可以在PHP中做到这一点,有没有办法在JavaScript中做到这一点?

+0

谢谢你的帮助!我抵制了创建一组对象的整个想法,但之前没有这样做。我问这个问题,认为这会帮助我开始一个对话框来找出答案。再次收到数组答案后,我试了一下,结果奏效了!对不起,相信这么慢。 –

回答

1

您可以创建,您可以设置/修改该对象的属性。

修改后的代码:

var obj = {}; // 
for (i=0;i<num;i++){ 
    obj[i] = new myObject("param1","param2"); 
    obj[i].someProperty = value; 
} 

我建议你使用数组。作为

var obj = []; // 
    for (i=0;i<num;i++){ 
     obj[i] = new myObject("param1","param2"); 
     obj[i].someProperty = value; 
    } 
+0

我知道这是旧的,但这并没有创建一个动态的对象名称。 – Craicerjack

6

这就是数组是,持有的东西的集合:

var objs = []; 
for (i=0;i<num;i++){ 
    objs[i] = new myObject("param1","param2"); 
    objs[i].someProperty = value; 
} 

动态变量几乎总是一个坏主意。

12

这不是建议的,但要做你正在做的事情(如果你在浏览器中而不是在其他js环境中运行)。

for (i = 0; i < num; i++) { 
    window['obj' + i] = new myObject("param1","param2"); 
    window['obj' + i].someProperty = value; 
} 
obj0.someProperty; 

这是有效的,因为全局变量实际上是窗口对象的属性(如果您在浏览器中运行)。您可以使用点表示法(myObject.prop)或括号表示法(myObject ['prop'])访问对象的属性。通过分配window ['obj'+ i],你正在创建一个名为'obj'+ i的全局变量。

更好的选择是使用数组或父对象来存储对象。

myObjs = {}; 
for (i = 0; i < num; i++) { 
    myObjs['obj' + i] = new myObject("param1","param2"); 
    myObjs['obj' + i].someProperty = value; 
} 
myObjs.obj0.someProperty; 

或者使用像很多其他答案建议的数组。

+0

我同意,上面的代码工作。但不要这样做! – Webbies

+0

我认为重要的是要指出,这些变量将是全球性的。 –

相关问题