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?
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?
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.