Mesmo assim, não custa nada eu tirar a sua dúvida. Vamos lá.
Temos a seguinte instrução:
this._listaNegociacoes = new ListaNegociacoes(model => this._negociacoesView.update(model));
Essa instrução esta passando para o constructor
de ListaNegociacoes
uma função que ao ser chamada recebe um parâmetro. No caso, eu chamei o nome do parâmetro de model
, mas poderia ser qualquer nome, pois em JavaScript quem escolhe o nome do parâmetro da função somos nós. Mas por que eu usei a palavra model?
Vamos olhar a definição da classe ListaNegociacoes
:
class ListaNegociacoes {
constructor(armadilha) {
this._negociacoes = [];
this._armadilha = armadilha;
}
adiciona(negociacao) {
this._negociacoes.push(negociacao);
this._armadilha(this);
}
get negociacoes() {
return [].concat(this._negociacoes);
}
esvazia() {
this._negociacoes = [];
this._armadilha(this);
}
//...
Veja que o parâmetro do constructor
da classe recebe uma armadilha como parâmetro, que nada mais é que uma função.
Então, o valor de armadilha será a função model => this._negociacoesView.update(model)
porque é ela que estou passando para o seu constructor.
Agora, veja o método:
adiciona(negociacao) {
this._negociacoes.push(negociacao);
this._armadilha(this);
}
Quando o adiciona é chamado, ele chamará a função definida em this._armadilha
. E quando chamar essa função, passará um parâmetro. Que parâmetros é esse? É this
. O this
é quem? A instância da classe que esta executando a operação. Essa instância não é um model? Então é ela que é recebida em model => this._negociacoesView.update(model)
Consegui clarear as ideias?