Fala Felipe, vamos lá:
O do proxy e do objeto original correto?
Caso o get do objeto original também tenha console.log, correto.
Onde esta o console log do Reflect.get ?
Vamos pensar o seguinte, imagine a seguinte classe:
class Person {
constructor(name, age) {
this._name = name
this._age = age
}
get name() {
console.log('Lendo o nome')
return this._name
}
get age() {
console.log('Lendo a idade')
return this._age
}
}
Caso a gente crie uma nova instância dela:
const p1 = new Person('Matheus', 25)
Podemos ler os dados do nome e idade através dos getters:
console.log(p1.name)
console.log(p1.age)
Nesse caso, o p1.name vai chamar o get name e o p1.age vai chamar o get age.
Agora, caso criamos um Proxy um para o objeto p1:
const personProxy = new Proxy(p1, {
get(target, prop, receiver) {
console.log(`Lendo a propriedade ${prop}`)
return Reflect.get(target, prop, receiver)
},
})
Ai poderíamos ler o nome e idade do Proxy:
console.log(personProxy.name)
console.log(personProxy.age)
Nesse caso ele vai chamar o get do Proxy, no caso esse código:
get(target, prop, receiver) {
console.log(`Lendo a propriedade ${prop}`)
return Reflect.get(target, prop, receiver)
},
Nesse caso ele vai chamar o primeiro log do Proxy e depois com o Reflect.get vai chamar o get do nome e idade, mas, do objeto original, no caso o get name e get age.
E por último vai chamar o get para ler os dados da classe, no caso: this._name e this._age.
Então seria dois get's, o primeiro para o get que criamos e o segundo para ler os dados da classe (que possuem um get por baixo dos panos por padrão).
Por isso ele vai logar duas vezes.
Espero ter ajudado.