1
resposta

Dúvida sobre o exemplo de arrow function do artigo apresentado na lição

No início da aula, é apresentado o artigo: https://www.alura.com.br/artigos/conhecendo-arrow-functions.

No exemplo citado pelo professor ele utiliza uma class que passa na arrow function a propriedade "nome". E depois declara, logo abaixo, a const "professores": class ModuloDeImpressao { constructor() { this._codigo = 10; } imprime(nomes) { nomes.forEach(nome => { console.log(${this._codigo}: ${nome}); }); } } Quando instanciamos um novoModuloDeImpressao:

const professores = ['Elias', 'Yuri','Gabriel', 'Guilherme','Yan']; const impressao = new ModuloDeImpressao(); impressao.imprime(professores);

Dúvida: Por quê, neste caso, não poderíamos para termos uma sintaxe mais correta, usar const "nomes", uma vez que o console devolveria o mesmo resultado?

class ModuloDeImpressao { constructor() { this._codigo = 10; } imprime(nomes) { nomes.forEach(nome => { console.log(${this._codigo}: ${nome}); }); } }

const nomes = ['Elias', 'Yuri', 'Gabriel', 'Guilherme', 'Yan']; const impressao = new ModuloDeImpressao(); impressao.imprime(nomes);

1 resposta

Oi

No exemplo fornecido, a razão pela qual o professor utiliza a propriedade this._codigo diretamente na arrow function é devido à natureza do escopo em que as funções são criadas no JavaScript.

No contexto de uma arrow function, o valor de this é capturado no momento em que a função é definida. Neste caso, a arrow function dentro do método imprime captura o valor de this no momento em que a arrow function é definida dentro do método, que é durante a execução da função construtora ModuloDeImpressao. Isso significa que ela captura a instância da classe ModuloDeImpressao, e, assim, pode acessar a propriedade _codigo.

Se você tentasse usar const nomes em vez de const professores, a referência a this._codigo não seria resolvida corretamente, pois a arrow function não teria mais o contexto da instância de ModuloDeImpressao para acessar this._codigo.

Então ao usar this._codigo dentro da arrow function, você garante que a propriedade _codigo seja acessada corretamente, independentemente de como o método imprime é chamado. Isso é uma prática comum em JavaScript quando você precisa acessar propriedades de uma instância dentro de funções callback ou funções internas.