如何在对象中正确声明一个 Javascript 对象数组
How to properly declare a Javascript array of objects in an object
我正在尝试创建一个包含对象数组的对象。我正在使用 jquery 选择器来确定数组中我想要的对象数。我在这里遇到了一些问题,因为当我进入 for 循环时,Firefox 说 "this.obj is undefined" 我尝试了 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]。我确定这确实很容易做到,但我似乎无法在任何地方找到示例。
以下对我有用:
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)
.
编辑
Would new Array(this.n) be faster than the this.obj=[] syntax since it's pre-allocated?
有趣的是,the answer is no。
此外,这个问题的公认答案对 JavaScript 数组性能的许多其他方面进行了很好的讨论:What is the performance of Objects/Arrays in JavaScript? (specifically for Google V8)
我已经更新了我的答案以使用 Array.push()
因为它显然比 Array[i] = new Obj()
快得多(向 Jason 大声喊叫,他在他的原始答案中使用了它)。
您可以使用
声明一个数组
this.obj = [];
然后循环将对象推入数组
for (var i =0; i < n; i ++) {
this.obj.push(new x3dSphere ());
}
我正在尝试创建一个包含对象数组的对象。我正在使用 jquery 选择器来确定数组中我想要的对象数。我在这里遇到了一些问题,因为当我进入 for 循环时,Firefox 说 "this.obj is undefined" 我尝试了 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]。我确定这确实很容易做到,但我似乎无法在任何地方找到示例。
以下对我有用:
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)
.
编辑
Would new Array(this.n) be faster than the this.obj=[] syntax since it's pre-allocated?
有趣的是,the answer is no。
此外,这个问题的公认答案对 JavaScript 数组性能的许多其他方面进行了很好的讨论:What is the performance of Objects/Arrays in JavaScript? (specifically for Google V8)
我已经更新了我的答案以使用 Array.push()
因为它显然比 Array[i] = new Obj()
快得多(向 Jason 大声喊叫,他在他的原始答案中使用了它)。
您可以使用
声明一个数组this.obj = [];
然后循环将对象推入数组
for (var i =0; i < n; i ++) {
this.obj.push(new x3dSphere ());
}