在另一个数组中使用array.push产生未定义

时间:2019-01-24 21:10:24

标签: javascript arrays object

尝试在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 个答案:

答案 0 :(得分:2)

正如其他人指出的那样,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);

答案 1 :(得分:1)

通过执行Narrativepush(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