interceptar

Como interceptar uma função em JavaScript ?

Boa tarde !

Está difícil de postar com frequência, mas esses dias descobri algo tão interessante que me motivou a tirar as teias de aranha daqui mais uma vez.
Bom, vamos logo ao assunto.

Um dia desses no trabalho me vi obrigado a interceptar a execução de uma função JavaScript de terceiros.
Mas o que eu quis dizer com “interceptar” ?!

No geral, eu precisava executar códigos meus antes e depois que uma determinada função (que não era minha) fosse executada, mas mantendo a chamada da função.
Após quebrar um pouco a cabeça e brincar com contextos de função, cheguei a uma solução limpa e que fez o trabalho pra mim.

Vamos supor que a função que eu gostaria de interceptar se chamasse bar().
Vou postar um código para termos como exemplo, mas a função não precisa ter sido criada por você:

var bar = function(){
  for (var i = 1; i <= 3; i++)
    alert(i);
};

Agora o código para interceptar essa função:

var foo = bar; // Note que não podemos colocar aqui os parênteses "()" na função "bar"
bar = function() {
  alert('Esse comando será executado ANTES da função original');
  foo.apply(this, arguments); // Chamada da função original
  alert('Esse comando será executado DEPOIS da função original');
};

Como puderam notar, a mágica está em atribuir a função para outra variável, e então criar outra função que execute a função original. O comando “apply” está presente em todas as funções e permite executar outra função em um contexto diferente, passando um array de parâmetros (que em todas as funções podem ser acessadas pela variável “arguments”).
Nesse caso então, podemos executar quaisquer comandos antes ou depois do apply que chama a função original encaminhando os parâmetros recebidos para a função original.

Espero que tenha sido útil !

Até mais !

“A mente é um fogo a ser aceso, não um vaso a preencher.”
– Plutarco

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *