Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Arrow function -> escopo dinâmico

class NegociacaoController {

    constructor() {

        let $ = document.querySelector.bind(document);
        this._inputData = $('#data');
        this._inputQuantidade = $('#quantidade');
        this._inputValor = $('#valor');

        this._listaNegociacoes = new ListaNegociacoes(model =>
            this._negociacoesView.update(model));
// ---- como transformar o this acima em DINÂMICO usando arrow function
    }
}

Sei que isso nada tem a ver com a solução do problema.... mas só por curiosidade: se eu quisesse implementar para que o escopo da arrow function se tornasse dinâmico (em vez de léxico)? como ficaria o código? Teria de usar o bind e o Reflect? como ficariam essas soluções no código ?

7 respostas
solução!

Olá!

Não existe arrow function com escopo dinâmico. Seu escopo é sempre estático (léxico). Inclusive você não pode mudar o this de uma arrow function justamente por ser léxico.

Se precisar de escopo dinâmico use function no lugar de arrow function.

Sucesso e bom estudo meu aluno.

class NegociacaoController {

    constructor() {

        let $ = document.querySelector.bind(document);
        this._inputData = $('#data');
        this._inputQuantidade = $('#quantidade');
        this._inputValor = $('#valor');

        let self = this; // essa é a solução?

        this._listaNegociacoes = new ListaNegociacoes
                (model =>  self._negociacoesView.update(model));
    }
}

Flávio, uma solução para manter a arrow function seria fazer isso, certo?

Você não está mudando o escopo da função (this), está usando uma variável.

Na verdade, eu formulei errado minha pergunta. Eu queria apenas uma solução para esse problema, sem abrir mão de utilizar a arrow function.

Mas a solução para esse problema (o this ser NegociacaoCobtroller) é usar a arrow function!!!

Eu mostro essa solução com self e logo em seguida introduzo arrow function. Você fez essa aula ?

Dei uma viajada, tava confundindo com outro exercício. Obrigado pela força, Flávio. Você é um cangaceiro do JS! hehehe Espero algum dia ter todo esse seu conhecimento em javascript.

Tamo junto!