在另一个数组中使用 array.push 会产生未定义的结果
2019-01-24
300
我在尝试在 Fire 数组内定义数组时遇到了问题(如代码所示)。
我使用 console.log() 输出 Fire[] 数组内的数组长度(作为调试),但收到一条错误消息,提示该数组未定义。这是我的代码:
var Fire = [];
var fire = function FireGen()
{
this.particle = [];
var part = function Particle()
{
};
this.particle.push(part);
};
Fire.push(fire);
console.log(Fire.particle.length); //Outputs undefined
我对 JavaScript 中的对象和数组用法还很陌生。如果有人能解释为什么我的数组未定义,我将不胜感激。
3个回答
正如其他人指出的那样,
Fire
是一个数组,因此要访问该数组中第一个元素的属性,您需要使用
Fire[0]...
。但是,您的代码中还有一些其他问题需要修复。
您的
FireGen
和
Particle
函数似乎被定义为构造函数(您在函数主体中使用
this
)。因此,您应该使用
new
运算符调用这些函数,例如
new FireGen()
。一旦做出此更改,您可能应该重新安排代码,以便
x
和
y
作为参数传入,并且您只定义每个函数一次。
例如:
var Fire = [];
function FireGen(x, y)
{
this.x = x;
this.y = y;
this.particle = [];
this.particle.push(new Particle(x, y));
};
function Particle(x, y)
{
this.x = x;
this.y = y;
};
function spawnFire(event)
{
var x = event.clientX;
var y = event.clientY;
Fire.push(new FireGen(x, y));
console.log(Fire[0].particle.length); //Outputs undefined
}
document.addEventListener('click', spawnFire);
p.s.w.g
2019-01-24
您正在定义从未执行过的函数,并将这些函数推送到数组中。该数组包含一个没有
particle
属性的函数。
您可能正在尝试执行如下操作:
var Fire = [];
var fire = {
particle: [
{
part: { /* ... */ }
}
]
}
Fire.push(fire);
console.log(Fire[0].particle.length); //Outputs 1
user229044
2019-01-24
通过执行
push(part)
和
push(fire)
,您正在推送函数定义。
要使它们表现为类,请使用
new
运算符
。(即
push(new part)
和
push(new fire)
。
此外,
Fire
是一个数组,因此您需要指定一个索引(例如
Fire[0]
表示数组中的第一个项目)。
var Fire = [];
var fire = function FireGen()
{
this.particle = [];
var part = function Particle()
{
};
this.particle.push(new part);
};
Fire.push(new fire);
console.log(Fire[0].particle.length);
Tyler Roper
2019-01-24