我正在尝试创建一个包含对象数组的对象。我正在使用jquery选择器来确定数组中我想要的对象数。我在这里有一些问题,因为当我进入for循环时,Firefox说“this.obj未定义”我尝试了 this.obj = new Array()语法以及 this.obj []; 语法。
function Base() {
this.n = document.querySelectorAll('transform').length /3;
this.obj = new Array(n); //array declaration
for (var i = 0; i < this.n; i++) {
this.obj[i] = new x3dSphere("b"+i);
}
}
我只看到对象中的数组示例,这些对象声明为 this.obj = [1,2,2,4] ,或者是JSON格式 obj:[1 ,2,3,4] 即可。我确信这很容易做到,但我似乎无法在任何地方找到一个例子。
答案 0 :(得分:4)
以下对我有用:
function Base() {
this.n = 5;
this.obj = [];
for (var i = 0; i < this.n; i++) {
this.obj.push(new Test());
}
}
Test
的位置:
var Test = function () {};
似乎真正的问题是它从未创建this.obj
,因为n
未定义。如果您想要声明数组之前的方式,请尝试new Array(this.n)
。
编辑
新的Array(this.n)会比this.obj = []语法更快,因为它已经预分配了吗?
有趣的是,the answer is no。
此外,关于此问题的已接受答案对JavaScript数组性能的许多其他方面进行了很好的讨论:What is the performance of Objects/Arrays in JavaScript? (specifically for Google V8)
我已经更新了使用Array.push()
的答案,因为它显然比执行Array[i] = new Obj()
快得多(对杰森说出来,他在原来的答案中使用过它)。
答案 1 :(得分:3)
您可以使用
声明一个数组this.obj = [];
然后在循环中将对象推入数组
for (var i =0; i < n; i ++) {
this.obj.push(new x3dSphere ());
}