开发者问题收集

在另一个数组中使用 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]... 。但是,您的代码中还有一些其他问题需要修复。

您的 FireGenParticle 函数似乎被定义为构造函数(您在函数主体中使用 this )。因此,您应该使用 new 运算符调用这些函数,例如 new FireGen() 。一旦做出此更改,您可能应该重新安排代码,以便 xy 作为参数传入,并且您只定义每个函数一次。

例如:

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