【问题标题】:Using array.push inside of another array yields undefined在另一个数组中使用 array.push 会产生 undefined
【发布时间】:2019-01-24 21:10:23
【问题描述】:
我在尝试在 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 中的对象和数组使用时,我还是个新手。如果有人能解释为什么我的数组未定义,我将不胜感激。
【问题讨论】:
标签:
javascript
arrays
object
【解决方案1】:
正如其他人所指出的,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);
【解决方案2】:
您正在定义永远不会执行的函数,并将这些函数推入一个数组。该数组包含一个没有particle 属性的函数。
你可能会尝试做这样的事情:
var Fire = [];
var fire = {
particle: [
{
part: { /* ... */ }
}
]
}
Fire.push(fire);
console.log(Fire[0].particle.length); //Outputs 1
【解决方案3】:
通过执行push(part) 和push(fire),您正在推送函数定义。
要使它们像类一样,请使用new operator。 (即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);