Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Entendendo o arguments

Extraí este trecho de código e fiz uns testes para entender a origem desse arguments:

get(target, prop, receiver) {
    console.log(arguments)
    if (['adiciona', 'esvazia'].includes(prop) && typeof(target[prop]) == typeof(Function)) {
        return function() {
            console.log(`interceptando ${prop}`);
            Reflect.apply(target[prop], target, arguments)
            console.log(arguments)
        }
    }

    return Reflect.get(target, prop)
} 

O primeiro log gera a seguinte saída: Arguments(3) [ListaNegociacoes, "adiciona", Proxy, callee: ƒ, Symbol(Symbol.iterator): ƒ] Isto porquê nesse escopo os parâmetros são target, prop e receiver.

Já a segunda saída retorna os argumentos passados para a função adiciona, como previsto. Porquê isto? Imagino que a razão seja porquẽ a função retornada literalmente substitui adiciona, certo? De certa forma é ela que está recebendo o parâmetro new Negociacao() nesse escopo. Faz sentido?

Podem me explicar como isso realmente acontece por debaixo dos panos?

1 resposta
solução!

Fala ai Tiago, tudo bem? Vamos lá:

Imagino que a razão seja porquẽ a função retornada literalmente substitui adiciona, certo? De certa forma é ela que está recebendo o parâmetro new Negociacao() nesse escopo. Faz sentido?

É isso mesmo, exatamente, a função retornada dentro do if será a executada pelo adiciona e esvazia então os parâmetros informados nela serão logados nesse segundo arguments.

Podem me explicar como isso realmente acontece por debaixo dos panos?

O que acontece é que quando as funções adiciona ou esvazia são executadas, o que de fato será executado seria a nova função retornada pela Proxy, assim, os parâmetros informados nela serão disponibilizados no arguments ou poderiam ser definidos explicitamente na declaração da função.

Espero ter ajudado.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software