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.