Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Grande confusão sobre o this

Olá Prof. Flávio e todos do Alura, eu realmente estou muito confuso sobre o uso de this, vim do php e sei que ele é usado apenas para ref a objetos, mas aqui existe leis nas quais estão me trucidando.

O que me fez confundir não é o seu uso em arrow functions, mas sim devido a dois exemplos que pra mim, entram em contradição:

Isso não funciona:

        class SistemaImpressao {

            constructor() {
                this._codigo = 2;
            }

            imprime(nomes) {

                nomes.forEach(function(nome) {
                    console.log(this);
                    console.log(`${this._codigo}: ${nome}`);
                });
            }
        }

        let nomes = ['Flávio', 'Nico', 'Douglas'];
        let si = new SistemaImpressao();
        si.imprime(nomes);

Isso funciona:

let carro = {
        velocidade: 100,
        acelera :function() {
            console.log(this);
            console.log(`Carro a ${this.velocidade} km por hora!`);
        }
    };
    carro.acelera();

Veja, os dois possuem o mesmo "esqueleto", ambos são objetos, ambos rodam um this dentro de uma função tentando acessar propriedades. Porque justamente o segundo dá certo e o primeiro não?

São excelentes os exemplos, pois mostram vários cenários, justamente no último eu me ferrei :(

2 respostas

Eu expliquei como pode resolver este problema e dei uma breve explicação do porque, dá uma lida e se não se aplicar ao seu caso, responda aqui.

https://cursos.alura.com.br/forum/topico-this-value-44065

solução!

Por mais que pareça o mesmo contexto não é, na primeira você está utilizando um forEach e o contexto de this passa a ser o do elemento do array, no segundo exemplo o this funciona perfeitamente por esta em um "método" do seu objeto carro, isso é mais ou menos assim:

class Carro{
    acelera(){
          console.log(this)
    }
}