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

Proxy

A minha dúvida se refere aos exercícios de criação de Proxy.

"Crie um proxy para este objeto, exibindo no console a mensagem "Armadilha aqui", toda vez que a propriedade email for lida."

Neste caso, só de teste acrescentei mais uma propriedade, fone, e chamei para que aparecesse no console também. E vi que a mensagem "Armadilha aqui" aparece também se chamado a propriedade fone, não apenas o email. Mas no enunciado do exercício era solicitado para exibir a mensagem toda vez que a propriedade EMAIL fosse lida, e não todas as propriedades. O nosso código está errado? Faltou implementarmos algo?

Segue o código do exercício:

var funcionario = {email: 'abc@abc.com', fone: '55 99887766'}; 

        var funcionarioparaproxy = new Proxy(funcionario, {
            get(target, prop, receiver) {
                console.log("Armadilha aqui!");
                return '**' + Reflect.get(target, prop, receiver) + '**';
            }
        });
        console.log(funcionarioparaproxy.email);
        console.log(funcionarioparaproxy.fone);

Confesso que estou com algumas dúvidas em relação à criação de Proxy, tanto para um objeto quanto para uma classe. Acho que não estou conseguindo captar a ideia de como fazer isso, e como diferenciar o que faço em cada situação (objeto e classe).

1 resposta
solução!

Fala aí Graziela, tudo bem? Vamos lá:

O seu Proxy não possuí nenhuma condicional de log, portanto, ao ler todas as propriedades do objeto o mesmo será logado.

Para fazer com que ele logue apenas quando você ler o email, você pode fazer um if pegando o parâmetro prop que é a propriedade acessada no momento.

Algo mais ou menos assim:

const funcionarioProxy = new Proxy(funcionario, {
    get(target, prop, receiver) {
        if (prop === 'email') {
            console.log('Estou no proxy')
            return 'Algum retorno diferente'
        }
        return Reflect.get(target, prop, receiver)
    }
})

Agora, apenas será logado caso ele esteja lendo a propriedade email do objeto

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