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

Ciclo método | Get --> Apply

get: function (target, prop, receiver) {
    //if (["adiciona", "esvazia"].includes(prop) && target[prop] instanceof 
    if (["adiciona"].includes(prop) && target[prop] instanceof Function) {
        return function(){
            console.log(`Interceptando prop: ${prop}`);
            return Reflect.apply(target[prop], target, arguments);
        };
    }
    return Reflect.get(target, prop, receiver);
}

Um function, quando invocada, é feito o get e depois o apply, de acordo com o Flávio.

A dúvida ficou no seguinte:

Porque fazemos o retorno fora do if com o: return Reflect.get(target, prop, receiver);

No entanto, dentro do if fazemos: return Reflect.apply(target[prop], target, arguments);

Compreendo que o apply vai realizar a invocação do método, porém, quando temos um método que não esta na condição do if, ele vai retornar com o "Reflect.get" e funciona. Por que não funciona se dermos um "Reflect.get" ao invés do "Reflect.apply" dentro do if ? Por exemplo, se eu não adicionar o "esvazia" na lista de métodos do if, ainda assim ele será executado, mesmo que não de o update no template (mesmo retornando via Reflect.get). Fico grato!

1 resposta
solução!

Fala ai Jair, tudo bem? Vamos lá:

Porque fazemos o retorno fora do if com o: return Reflect.get(target, prop, receiver);

A ideia seria realizar um tratamento diferente para determinadas propriedades e não simplesmente apensar chamar o get.

No entanto, dentro do if fazemos: return Reflect.apply(target[prop], target, arguments);

Acho que foi apenas uma maneira de demonstrar coisas à mais e possíveis outras funções da Reflect, como a apply, o instanceof e includes.

E um detalhe importante é que nesse segundo exemplo as funções originais estão sendo substituídas pela nova retornada através do Proxy.

É como eu gosto de dizer: "Na maioria das vezes vai haver mais de uma solução para dado um problema".

Esse foi um exemplo disso.

Espero ter ajudado.