Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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.