2012-07-22 56 views
0

我创建了几个对象.. p0,p1,p2,... p。其中max'n'是已知的。 p?对象具有自定义的方法(例如,startp())。JavaScript - 将预先创建的对象(o1,o2,o3 ..)存储在一个数组中

我想将它们推入一个数组(我们称之为'A')。这样,给定一些索引我,我想调用一些方法,如:A [i] .startp()。我的javascript代码:

A = []; 
for (var i=0; i<=n; i++){ 
    A.push(eval('p'+i)); 
} 

我得到类似“ReferenceError:p0未定义”的错误。

谢谢。

+9

修复代码,使它们首先在数组中创建,而不是在具有相似名称的一堆变量中创建。 – Quentin 2012-07-22 18:13:00

+2

请将代码发布到创建这些对象的位置。并且不要在99%的情况下使用'eval()'...有更好的解决方案。 – kapa 2012-07-22 18:15:26

回答

2

相反的:

var p0 = { x: "foo" }; 
var p1 = { x: "bar" }; 

等,只是这样做:

var A = [ 
    { x: "foo" }, 
    { x: "bar" } 
]; 
1

个人标识只是去与尖给出了答案,但根据其中p?声明(想人们称之为范围),你可以做这样的事情,以避免EVAL ....

var A = []; 
for (var i=0; i<=n; i++){ 
    A.push(window['p'+i]); 
} 

...什么工作代替窗口;)...很难给你一个确切的答案,而不看到更多的代码。

+0

问题是这些p?在创建A []数组的模块之前导入的某些模块中,对象是以任意顺序随机创建的。对象创建顺序可能类似于:p1,p3,p0,p2 ..。我不能只要这些p就将它们推入一些数组中?创造自己,因为我希望他们能够以正确的顺序进行创作(即使假设A []在创建p?对象之前就已存在)。 – 2012-07-23 08:34:13

+0

我试过窗口['p'+ i]解决方案。它没有工作。 – 2012-07-23 08:35:01

相关问题