1
resposta

Funcionamento do log por 'debaixo dos panos'

Fala pessoal,

eu andei lendo as respostas sobre o funcionamento do log duplo, porém ainda não ficou totalmente claro pra mim.

Ele dá o log 2x porquê primeiro ele intercepta o get do método e depois dos atributos que por debaixo dos panos possuem um get padrão correto?

Porém quando eu retiro o receiver dos parâmetros ele me retorna apenas o get do método. Segue o código:

let negociacao = new Proxy(new Negociacao(new Date(), 1, 10
    get(target, prop) {

        console.log(`A propriedade ${prop} foi interceptada.`)

        return Reflect.get(target, prop)
    }
})
console.log(negociacao.quantidade)
console.log(negociacao.valor)

A saída:

A propriedade quantidade foi interceptada. 1 A propriedade valor foi interceptada. 100

PORQUÊ ISTO ACONTECE? COMO REALMENTE FUNCIONA?

Obrigado!

1 resposta

Fala ai Tiago, tudo bem? Vamos lá:

Ele dá o log 2x porquê primeiro ele intercepta o get do método e depois dos atributos que por debaixo dos panos possuem um get padrão correto?

Exatamente, é isso, você pode até reparar que a prop seria diferente, uma vai ser publicada e outra com o _.

PORQUÊ ISTO ACONTECE? COMO REALMENTE FUNCIONA?

Essa é nova para mim, nunca havia reparado ou feito esse teste, muito bem.

Vou te dizer o que eu acredito que esteja ocorrendo:

Isso ocorre por conta do funcionamento referente ao terceiro parâmetro do Reflect.get que seria o receiver, ele basicamente vai setar o contexto de execução para a chamada do target.

Ou seja, quando o código está assim:

get(target, prop, receiver)

Esse terceiro parâmetro do get da Proxy é a própria Proxy ou algum objeto que herda dela.

Sendo assim:

Reflect.get(target, prop, receiver)

Estamos dizendo que o contexto do this deve ser a Proxy, então dentro do get quando ele faz this._email ele vai passar pelo get da Proxy novamente.

Isso porque o this agora é a Proxy e não mais a classe em si.

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