Oi Luiz, vamos tirar essas dúvidas.
Primeiro, vou indicar os conteúdos de revisão:
https://cursos.alura.com.br/course/javascript-es6-orientacao-a-objetos-parte-1/task/16530
No capítulo acima, arrow function é introduzida apenas como uma sintaxe mais enxuta que function, quando na verdade não é.
Contudo, no módulo 2 do treinamento, que você ainda não chegou, é mostrada a diferença marcante da arrow function
https://cursos.alura.com.br/course/javascript-es6-orientacao-a-objetos-parte-2/task/17451
Inclusive há um exercício de revisão
https://cursos.alura.com.br/course/javascript-es6-orientacao-a-objetos-parte-2/task/17455
Bom, digamos que você se colocou em uma situação na qual precisa avançar com o treinamento, mas vou dar uma explicada resumida aqui em algo que é quase 40 minutos de explicação.
Toda function possui um this dinâmico. Isto é, ele muda de acordo com o contexto que a função é chamada e só sabemos o seu valor quando a função é chamada (runtime). Já uma arrow function possui um this léxico, ou seja, estático. Ele não muda em runtime e se preserva ao logo da aplicação. No caso, você pode antecipadamente indicar qual é o this de uma arrow function olhando o escopo ao redor do seu código.
Voltando ao exemplo do seu código, com arrow function:
_limpaMensagem(){
this._inputData.addEventListener('keypress', () => {
console.log('ouvindo');
this._mensagem.texto = '';
this._mensagemView.update(this._mensagem);
});
}
Como você esta usando arrow function, o this não será o elemento inputData. Seria se você usasse function. Quando usa arrow function, o this será a instância do seu controller, aquela no qual o método _limpaMensagem é definido. É por isso que você conseguirá usar this._mensagemView
. Ele se manterá até o fim.
Quando chegar no segundo módulo poderá praticar ainda mais com arrow function.
Por fim, se o seu método começa com _
é porque ele não pode ser chamado fora da instância de NegociacaoController
. Se quiser continuar com o código que escreveu depois da minha explicação, ok, não há problema continuar com o _
.
O mais importante é entender que JavaScript não é Java, é uma linguagem completamente diferente, apesar de alguns conceitos de OO se aplicarem em ambas. Digo isso porque vi que cursou cursos de Java.