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

Proxy para uma função

Olá Pessoal,

Seria possível criar um proxy para uma função?

Estava testando no código abaixo, mas a mensagem aparece quando a tela é carregada e não qnd a div é clicada.

  const div = document.querySelector('div');

        function click(){
            const newDiv = document.createElement('div');
            newDiv.classList.add('div2')
            div.appendChild(newDiv);
        }

        let clickProxy = new Proxy(click,{

            get: function(target, prop, receiver){
               console.log(`${target} foi interceptada`)


            }
        });

        div.addEventListener('click',clickProxy)

Obrigado!!

1 resposta
solução!

Oi Marcos, tudo bem?

Desculpe a demora em retornar.

Sim, é possível criar um Proxy para uma função. No código que você apresentou, a mensagem é exibida quando a função é acessada (por causa do get), e não quando o evento de clique é disparado.

Para exibir a mensagem quando o evento de clique é disparado, você pode adicionar o log dentro da função click, como no exemplo abaixo:

const div = document.querySelector('div');

function click() {
    console.log('Função click foi chamada');
    const newDiv = document.createElement('div');
    newDiv.classList.add('div2')
    div.appendChild(newDiv);
}

let clickProxy = new Proxy(click, {
    apply: function(target, thisArg, args) {
        console.log('Proxy foi chamado');
        return target.apply(thisArg, args);
    }
});

div.addEventListener('click', clickProxy);

Nesse código, o apply é utilizado para interceptar a chamada da função e exibir a mensagem de log antes de chamar a função original. Dessa forma, quando o evento de clique for disparado, a mensagem será exibida antes da função click ser executada.

Um abraço e bons estudos.