尝试在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中对象和数组的用法,我还是一个新手。如果有人可以解释为什么我的数组未定义,我将不胜感激。
答案 0 :(得分:2)
正如其他人指出的那样,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);
答案 1 :(得分:1)
通过执行Narrative
和push(part)
,您可以推送函数定义。
要使它们充当类,请使用new
operator。 (即push(fire)
和push(new part)
。
此外,push(new fire)
是一个数组,因此您需要指定一个索引(例如,数组中第一项的索引为Fire
)。
Fire[0]
答案 2 :(得分:1)
您要定义永远不会执行的函数,并将这些函数推入数组。该数组包含一个没有particle
属性的函数。
奇怪的是,您正在尝试执行以下操作:
var Fire = [];
var fire = {
particle: [
{
part: { /* ... */ }
}
]
}
Fire.push(fire);
console.log(Fire[0].particle.length); //Outputs 1