Использование array.push внутри другого массива дает неопределенный - PullRequest
0 голосов
/ 25 января 2019

Я столкнулся с проблемой при попытке определить массив внутри массива 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 голосов
/ 25 января 2019

Вы определяете функции, которые никогда не выполняются, и помещаете эти функции в массив. Массив содержит функцию, у которой нет свойства particle.

Скорее всего, вы пытаетесь сделать что-то вроде этого:

var Fire = [];

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

Fire.push(fire);

console.log(Fire[0].particle.length); //Outputs 1
0 голосов
/ 25 января 2019

Как уже отмечали другие, Fire - это массив, поэтому для доступа к свойствам первого элемента из этого массива необходимо использовать Fire[0].... Однако есть несколько других проблем с вашим кодом, которые также необходимо исправить.

Ваши функции FireGen и Particle, по-видимому, определяются как функции конструктора (вы используете this в теле функции). Поэтому вы должны вызывать эти функции с помощью оператора new, например, new FireGen(). После того, как вы внесете это изменение, вам, вероятно, следует изменить порядок своего кода таким образом, чтобы x и y передавались в качестве аргументов, и вы определяли каждую функцию только один раз.

Например:

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 голосов
/ 25 января 2019

Делая 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...