Problemas com forEach

1 Respostas   82 Visualizações

0 Membros e 1 Visitante estão vendo este tópico.

Geraldo de Rívia

  • Mito
  • *
  • Posts: 4452
  • Ouros: 3887
  • O vento está sibilando.
  • Medalhas Vencedor do Protótipo Premiado Participantes do Maps Together 2
Tópico criado em: 13/06/2017 às 10:59

Saudações, galera!

Seguinte, eu sempre me esquivei do .forEach, dando um jeito de usar o .for no lugar. Porém, para fins de aprendizado e até mesmo parar de usar essa recursividade do for e encaixar o forEach quando cabível, queria entender como ele funciona. Tenho o exemplo que é onde estou tentando implantar: Há uma array para o sistema de partículas, cada índice da array equivale a uma partícula, logo, quando preciso atualizar as partículas, eu atualizo cada índice da array, daí tentando usar o .forEach.

linha que usar o forEach:
Código: [Selecionar]
this.weatherParticles.forEach(this.updateWeatherParticles);
Função que o .forEach roda em cada índice:
Código: [Selecionar]
Scene_Map.prototype.updateWeatherParticles = function(element, index, array) {
element.x += 1;
element.y += 2;
if (this.particleOutsideBounds(element.x, element.y)) {
this.removeChild(array[index]);
array.splice(index, 1);
index--;
};
};

O problema é que está dando como inexistente a função particleOutsideBounds, que existe e está com a sintaxe correta. element.x e element.y também não estão como undefined, então creio estar errado algo nos argumentos recebidos pela função. Usei como base o primeiro exemplo dessa página.
Teria como me darem uma luz sobre quais argumentos o forEach envia e quais a funçaõ recebe? Porque, os exemplos que vi no maker possuem a função na mesma linha em que o forEach é usado, e não encontrei nenhuma que usasse três argumentos como na página linkada.

Kyo Panda

  • Mito
  • *
  • Posts: 259
  • Ouros: 195
Resposta 1: 13/06/2017 às 20:33

O this dentro do forEach é naturalmente undefined. Mas o senhor pode passar um segundo argumento na função determinando o quê será o this:

Código: [Selecionar]
this.weatherParticles.forEach(this.updateWeatherParticles, this);
Um exemplo:

Código: [Selecionar]
var dog = { goodBoy: 0 };
var whoIsTheGoodBoy = [15, 20, 40, 10];

whoIsTheGoodBoy.forEach(function(who) {
  this.goodBoy += who;
}, dog);

console.log(dog);

o/