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

Uma saída que não entendi

Para testar o proxy e sacramentar se realmente entendi os conceitos dados pelo professor eu resolvi brincar com o proxy e fiz o seguinte código

let funcProxy = new Proxy(new Funcionario('abc@abc.com'),{
    get(target,prop,receiver){
        console.log(`Armadilha plantada ${prop}`);
        return `*${Reflect.get(target,prop,receiver)}*`;
    }
})
console.log(funcProxy.email);

E a resposta no console foi

Armadilha plantada email
 Armadilha plantada _email
 **abc@abc.com**

As duas primeiras ok, era o esperado mas pq a segunda parte teve dois asteriscos no começo e no final? E se eu retornar no handler do proxy algo como returnqsq${Reflect.get(target,prop,require)}frg; nós teremos no console

*qsq*qsqabc@abc.comfrg*frg*

Ou seja ele duplica no começo e no final entre o reflect.get, porem com target[prop] não rola isso, pq?

3 respostas
solução!

Fala ai Hiago, tudo bem? Isso é uma particularidade do terceiro parâmetro da função Reflet.get onde o mesmo se refere ao contexto da função.

Quando a gente passou o terceiro parâmetro que seria o receiver a gente muda o contexto da função para a Proxy em si, sendo assim, a função vai pegar o email da Proxy e depois da classe, algo assim:

Pegar a propriedade email da Proxy
Ler a propriedade email da Classe (get)
Pegar a propriedade _email da Proxy
Ler a propriedade _email da Classe (atributo)

Sem informar o receiver seria algo:

Pegar a propriedade email da Proxy
Ler a propriedade email da Classe (get)

A execução é feita apenas uma vez e diretamente na classe (objeto que a Proxy herda).

É um pouco confuso e complexo usar o receiver com Proxy.

Espero ter ajudado.

hmm entendi, realmente esse tal de proxy é um tanto confuso mas muito útil. Obirgado pelo esclarecimento Matheus :D

Magina Hiago, a Proxy e Reflect são um pouco chatas mesmo, muitas variações e diferentes comportamentos.

Sempre que precisar não deixe de criar suas dúvidas.

Abraços e bons estudos.