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

escopo forEach

Apesar do this.codigo esta dentro da classe, o fato da propriedade se encontrar dentro do escopo de forEach ele perde a referencia com a classe? O js não vai subindo os ecopos até achar this.codigo? Não sei se entendi o undefined.

 class SistemaImpressao {

            constructor() {
                this._codigo = 2;
            }

            imprime(nomes) {
                // usando arrow function.
                nomes.forEach(nome => {
                    console.log(this);
                    console.log(`${this._codigo}: ${nome}`);
                });
            }
        }

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

Felipe, bom dia.

O escopo do this se torna local dentro de um forEach. Então ele diz respeito a "nome". Se não existir nome._codigo vai dar undefined mesmo. Se quiser usar this._codigo dentro de forEach vc deveria colocar em uma variável local antes da linha que chama o loop.

Se eu consegui te ajudar, marque a resposta como solucionada, por favor! Abs.

Faz sentido. Isso acontece porque array nomes foi criado no escopo global não é? Se eu tivesse criado array nomes dentro do classe SistemaImpressão, o this apontaria para classe correto?

Seria por isso que no escopo global, quando chama nomes.foreach () aponta pra window. e não nomes?

solução!

Veja esse artigo sobre isso. Acho que vai ajudar bastante. Entender bem o escopo do this é fundamental na linguagem javascript.

https://medium.com/tech-tajawal/javascript-this-4-rules-7354abdb274c

Se eu consegui te ajudar, marque a resposta como solucionada, por favor! Abs.