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

Mesmo resultado mas com resolução diferente!

Em relação ao exercício, resolvi da seguinte maneira:

let funcionario = {email: 'abc@abc.com'};

       let proxy = new Proxy(funcionario, {
           set(target, prop, value, receiver) {
               console.log(`Valor anterior era ${target.email}`);
               console.log(`Novo valor é ${value}`);
           }
       })

       proxy.email = 'joão@joão.com'

Rodando no console do navegador, o resultado corresponde com o esperado, porém na resolução original do exercício, está da seguinte forma:

let funcionario = {email: 'abc@abc.com'};
let funcionarioProxy = new Proxy(funcionario,  {

    set(target, prop, value, receiver) {
        console.log(`Valor antigo ${target[prop]}, valor atual: ${value}`);
        return Reflect.set(target, prop, value, receiver);
    }

});
funcionarioProxy.email = 'aaa@aaa.com';

Não utilizei return Reflect.set(target, prop, value, receiver); muito menos chamei a propriedade do jeito target[prop]. O que poderia ser?

3 respostas

João Vitor, bom dia!

De fato funciona pois as características são as mesmas, porém ao não dar o return você não será capaz de fazer uma manipulação direta daquele objeto logo após o set(). Ou seja, se você fizer assim e tentar colocar um . na frente com algum método, não será possível pois o set não possui retorno.

Veja mais em: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Reflect/set

Espero ter ajudado e bons estudos!

solução!

Bom dia, João Victor! Como vai?

Apenas acrescentando um detalhe: o seu código sempre vai imprimir Valor anterior era ${target.email} mesmo que a propriedade do target seja diferente de email! Por isso, no código do mestre Flávio, é feito Valor antigo ${target[prop]}, valor atual: ${value}! De modo que ele pega exatamente a propriedade que está sendo alterada no objeto!

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Entendi! Muito obrigado!