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

Construindo armadilhas pra metodos

Olá,

tive algumas duvidas na explicação deste código:

get(target, prop, receiver) {
    if(['adiciona', 'esvazia'].includes(prop) && typeof(target[prop]) == typeof(Function)) {

        return function() {

          console.log(`a propriedade "${prop}" foi interceptada`);
          Reflect.apply(target[prop], target, arguments);
        }

    }
    return Reflect.get(target, prop, receiver);
 }

1 - Não entendi por que não pode ser uma arrow function na função retornada. Faria diferença se o escopo de "this" fosse diferente?

2 - "arguments" não deveria fazer referencia ao argumentos de "get" ao invés de "adiciona"?

2 respostas
solução!

Tem que ser function porque o this tem que ser dinamico pois essa função será a substituta da função original no objeto.

Arguments é da função que você esta colocando no lugar de outra e como estamos fazendo essa troca via get não temos acesso aos parâmetros da função substituida, por isso usamos arguments.

Esse capítulo foi bem tenso, espero lembrar desse conceito num cenário real.