O "this" dentro da função anônima, em meu código que é idêntico ao do professor, não faz referência à classe cujo nome é "ListaNegociacoes" e sim à "NegociacoesController". Dessa forma, eu não recebi uma mensagem de erro.
O "this" dentro da função anônima, em meu código que é idêntico ao do professor, não faz referência à classe cujo nome é "ListaNegociacoes" e sim à "NegociacoesController". Dessa forma, eu não recebi uma mensagem de erro.
Corrigindo : eu utilizei uma Arrow Function e não uma "função literal" : Function(){}; Utilizando uma função literal eu tive o mesmo erro que o professor exibiu em aula.
Oi Eugenio!
Desculpe a demora pelo retorno. Essa situação que você encontrou geralmente causa muita confusão.
this._listaNegociacoes = new ListaNegociacoes(function (model) {
this._negociacoesView.update(model);
});
Neste exemplo, o primeiro this
se refere ao NegociacoesController
e o segundo ao ListaNegociacoes
, isso porque o this
depende do contexto em que está sendo declarado.
Porém as arrow functions não possuem seu próprio this
e elas pegam o this
do escopo em que foram declaradas, neste caso o do NegociacoesController
.
this._listaNegociacoes = new ListaNegociacoes( (model) => {
this._negociacoesView.update(model);
});
No exemplo acima os dois this
se referem ao NegociacoesController
. O primeiro porque está se referindo diretamente ao NegociacoesController
e o segundo porque o this
na declaração da função é o NegociacoesController
. Como a arrow function não tem seu próprio this
, ela pega o do contexto que foi declarada.
Este video aborda de maneira bem completa e com exemplos como o this
funciona com os diferentes tipos de funções.
Espero ter ajudado! Qualquer outra dúvida pode postar aqui.
Eu entendi que no caso do "This" dentro da Arrow Function o conceito por trás é chamado de "Contexto Léxico". Dessa forma quando não é encontrado, nesse caso, o tal método no contexto onde ela foi executada; este método é procurado no contexto superior e este contexto é o "NegociacoesController".
O this dentro de uma Function Literal é dinâmico, sendo assim, assumindo o valor do contexto de onde for executada a tal Function Literal.
Agradeço pela explicação, Eduardo Tioma .