Olá pessoal!
Abaixo a classe e a resposta desta atividade (considerando return function):
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)) {
// forma 1 início
return function() {
console.log(`Interceptei o método: ${prop}, por isso estou exibindo essa mensagem!`);
return Reflect.apply(target[prop], target, arguments);
}
// forma 1 fim
}
return Reflect.get(target, prop, receiver);
}
});
console.log(pessoa.grita('Olá'));
E abaixo o código (forma 2) que substituí no código acima (onde estão os comentários forma 1):
console.log(`Interceptei o método: ${prop}, por isso estou exibindo essa mensagem!`);
Reflect.apply(target[prop], target, arguments);
Para mim tanto a forma 1 quanto a forma 2 geraram o mesmo resultado.
Tanto nesta atividade, quanto no vídeo que explica sobre interceptação de método, é citado a utilização de return function.
Dúvida: as duas formas estão corretas?
Questiono porque não entendi o motivo de ser necessário um return function (se puderem explicar), visto que (na minha opinião) a forma 2 é menos verbosa e seria a primeira solução que me viria à mente caso necessitasse utilizar o Proxy (não sei se a forma 1 me viria à mente).
Desde já obrigado! At.te