Código do exercício:
class Pessoa {
constructor(nome) {
this._nome = nome;
}
get nome() {
return this._nome;
}
set nome(nome) {
this._nome = nome;
}
grita(frase) {
return `${this._nome} grita ${frase}`;
}
}
let pessoa = new Proxy(new Pessoa('Barney'), {
get(target, prop, receiver) {
if(prop == 'grita' && typeof(target[prop]) == typeof(Function)) {
return function() {
console.log(`Interceptei o método: ${prop}, por isso estou exbindo essa mensagem!`);
Reflect.apply(target[prop], target, arguments);
}
}
return Reflect.get(target, prop, receiver);
}
});
console.log(pessoa.grita('Olá'));
Gostaria de perguntar: Se o Reflect.apply
, serve para evocar uma função/método de acordo com o contexto passado. E o Reflect.apply
nesse caso, está invocando o método grita, com o contexto dele mesmo.
Se objetivo do código nesse caso é interceptar o método grita com uma outra função, ou seja, sobrescrevendo o método original, porque a presença do Reflect.apply
no código?