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 :(