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.
3 Réponses :
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);
@ 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.
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
Comme d'autres l'ont souligné, Vos fonctions Par exemple: 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. 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. 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);