Extraí este trecho de código e fiz uns testes para entender a origem desse arguments:
get(target, prop, receiver) {
console.log(arguments)
if (['adiciona', 'esvazia'].includes(prop) && typeof(target[prop]) == typeof(Function)) {
return function() {
console.log(`interceptando ${prop}`);
Reflect.apply(target[prop], target, arguments)
console.log(arguments)
}
}
return Reflect.get(target, prop)
}
O primeiro log gera a seguinte saída: Arguments(3) [ListaNegociacoes, "adiciona", Proxy, callee: ƒ, Symbol(Symbol.iterator): ƒ] Isto porquê nesse escopo os parâmetros são target, prop e receiver.
Já a segunda saída retorna os argumentos passados para a função adiciona, como previsto. Porquê isto? Imagino que a razão seja porquẽ a função retornada literalmente substitui adiciona, certo? De certa forma é ela que está recebendo o parâmetro new Negociacao() nesse escopo. Faz sentido?
Podem me explicar como isso realmente acontece por debaixo dos panos?