Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Contexto no foreach

Porque no método

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

O valor de this dentro do forEach é undefined?

1 resposta
solução!

Veja a diferença do forEach dentro do método do objeto e fora do método. Veja os locais que sinalizei:

    class SistemaImpressao {

        constructor() {
            this._codigo = 2;
        }

        imprime(nomes) {

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

let nomes = ['Flávio', 'Nico', 'Douglas'];

nomes.forEach(function(nome) {

    console.log(this); //<--- window
    console.log(`${this._codigo}: ${nome}`);
});

let si = new SistemaImpressao();
si.imprime(nomes);

Se você não passar um segundo argumento para o forEach o this será window (forEach pode receber o contexto do this como parâmetro). Porém, só será window, se você estiver fora do escopo de um método de um objeto. Lembre-se que funções são dinâmicas e obtém o seu valor de this em tempo de execução. Sendo do método do objeto o this do forEach será undefined. Fora, será window.

Todavia, não faz sentido querer acessar this dentro de um forEach que você não especificou o this. Porém, se você usa uma arrow function, o this será do objeto com o método imprime. No caso, a intenção dentro do foreach era acessar os dados do array através do parâmetro do callback e também acessar as propriedades do objeto.