繁体   English   中英

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

[英]Using array.push inside of another array yields undefined

尝试在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中对象和数组的用法,我还是一个新手。 如果有人可以解释为什么我的数组未定义,我将不胜感激。

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

通过执行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); 

您正在定义永远不会执行的函数,并将这些函数推入数组。 该数组包含一个没有particle属性的函数。

奇怪的是,您正在尝试执行以下操作:

 var Fire = []; var fire = { particle: [ { part: { /* ... */ } } ] } Fire.push(fire); console.log(Fire[0].particle.length); //Outputs 1 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM