1
votes

L'utilisation de array.push à l'intérieur d'un autre tableau donne undefined

J'ai rencontré un problème en essayant de définir un tableau à l'intérieur du tableau Fire (vu dans le code).

J'ai utilisé console.log () pour afficher la longueur du tableau qui est à l'intérieur de mon tableau Fire [] (comme un debug) mais a obtenu une erreur indiquant que ledit tableau n'était pas défini. Voici mon code:

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

Je suis assez novice en ce qui concerne l'utilisation des objets et des tableaux en JavaScript. J'apprécierais que quelqu'un puisse expliquer pourquoi mon tableau n'est pas défini.


0 commentaires

3 Réponses :


1
votes

En faisant push (part) et push (fire) , vous transmettez les définitions de fonctions.

Pour qu'elles se comportent comme des classes, utilisez le nouvel opérateur fort> . (c'est-à-dire push (nouvelle partie) et push (nouveau feu) .

De plus, Fire est un tableau donc vous Vous devrez spécifier un index (par exemple Fire [0] pour le premier élément du tableau).

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);


1 commentaires

@ GytisDokšas Heureux d'avoir aidé. Cela dit, jetez un œil à la solution de p.s.w.g . Sa mise en œuvre est extensible et - à mon avis personnel - la bonne façon d'accomplir cela.



1
votes

Vous définissez des fonctions, qui ne sont jamais exécutées, et vous les insérez dans un tableau. Le tableau contient une fonction qui n'a pas de propriété particule .

Il y a de fortes chances que vous essayiez de faire quelque chose comme ceci:

var Fire = [];

var fire = {
  particle: [
    {
      part: { /* ... */ }
    }
  ]
}

Fire.push(fire);

console.log(Fire[0].particle.length); //Outputs 1


0 commentaires

2
votes

Comme d'autres l'ont souligné, Fire est un tableau, donc pour accéder aux propriétés du premier élément de ce tableau, vous devez utiliser Fire [0] ... code >. Cependant, il y a quelques autres problèmes avec votre code qui doivent également être corrigés.

Vos fonctions FireGen et Particle semblent être définies comme des fonctions this dans le corps de la fonction). Vous devez donc appeler ces fonctions avec le nouveau opérateur, par exemple nouveau FireGen () . Une fois ce changement effectué, vous devriez probablement réorganiser votre code de sorte que x et y soient passés en arguments et que vous ne définissiez chaque fonction qu'une seule fois.

Par exemple:

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);


0 commentaires