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

Função do Reflect.apply() no proxy

    static create(obj, props, acao){

        return new Proxy(obj,{

            get(target, prop, receiver){

                console.log(`valor anterior: ${target[prop]}`);
                console.log(prop + " é do tipo " + typeof(prop));

                if(props.includes(prop) && ProxyFactory._isFunction(target[prop])){ 

                    return function() {

                        console.log(`interceptado: ${prop}`);
                        **Reflect.apply(target[prop], target, arguments);**
                        acao(target);
                    }
                }
                return Reflect.get(...arguments); 
            },

Eu consegui compreender a função do Reflect.get e set no proxy, porém não consegui entender a função do .apply() no código, sendo que o código ele não funciona sem ele.

3 respostas

Fala ai Thiago, tudo bem? O Reflect.apply irá executar uma função com os argumentos específicados, onde:

Reflect.apply(função, contextoDaFuncao, parametros)

Onde:

  • função: Será a função à ser executada.
  • contextoDaFuncao: Será o valor de this dentro da função.
  • parametros: Será um array de parâmetros à ser passado para a função, onde cada posição do array será um parâmetro na função.

Espero ter ajudado.

Mas qual seria o contexto da aplicação dessa função no código ?

solução!

O Reflect.apply vai chamar algum método ou função do seu objeto.

E repare que você está devolvendo uma função nova, basicamente você está substituindo a função do objeto por uma função nova que será interceptada e ao seu fim, irá chamar a função do objeto.

Resumindo: Você está interceptando, devolvendo uma função nova e chamando a função do objeto.

Espero ter ajudado.