如何正确声明对象中的Javascript对象数组

时间:2015-07-29 02:49:35

标签: javascript arrays object declaration

我正在尝试创建一个包含对象数组的对象。我正在使用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] 即可。我确信这很容易做到,但我似乎无法在任何地方找到一个例子。

2 个答案:

答案 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 ());
}