Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Sobre o return dentro da function

O código do exercício é o seguinte (se a condição for verdadeira, ele retorna uma função, no escopo desta função passamos a instrução que sobrescreve a função grita() e RETORNAMOS (return) Reflect.aplly(...). ou seja, damos um return de uma função que esta mesma possui outro return em Reflect.aplly(...)

get(target, prop, receiver) {
            if(prop == 'grita' && typeof(target[prop]) == typeof(Function)) {
                return function() {
                    console.log(`Método chamado: ${prop}`); 
                    return Reflect.apply(target[prop], target, arguments);       
                }
            }
            return Reflect.get(target, prop, receiver);
        }
        });

Porém fiz da seguinte maneira (dentro da instrução da função não possui return antes de Reflect.aplly(...)) e me parece que funcionou normalmente:

get(target, prop, receiver) {
            if(prop == 'grita' && typeof(target[prop]) == typeof(Function)) {
                return function() {
                    console.log(`Método chamado: ${prop}`); 
                    Reflect.apply(target[prop], target, arguments);       
                }
            }
            return Reflect.get(target, prop, receiver);
        }
        });

A questão aqui é: Preciso utilizar o return antes de Reflect.aplly ? Se sim, não ficou claro para mim o motivo.

1 resposta
solução!

Olá Cássio,

Utilizei o código desta atividade, apenas substituindo o código do get pelo código da tua mensagem (acima):

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(`Método chamado: ${prop}`); 
                    Reflect.apply(target[prop], target, arguments);       
                }
            }
            return Reflect.get(target, prop, receiver);
        }
        });

Quando executei console.log(pessoa.grita('Olá')) no console do navegador, ao contrário do que aconteceu pra ti, pra mim não funcionou (abaixo retornos no console):

Método chamado: grita
undefined

Porém adicionando/considerando o return...

return Reflect.apply(target[prop], target, arguments);

, funcionou, ou seja, o resultado no console do navegador foi:

Método chamado: grita
Barney grita Olá

Favor testa novamente o teu código (ou utiliza o que eu considerei acima, sem o return), e retorna se novamente funcionou normalmente.

Atenciosamente.