Existe uma maneira de fazer com que qualquer função produza uma instrução console.log quando for chamada registrando um gancho global em algum lugar (isto é, sem modificar a função real em si) ou por algum outro meio?
97
Existe uma maneira de fazer com que qualquer função produza uma instrução console.log quando for chamada registrando um gancho global em algum lugar (isto é, sem modificar a função real em si) ou por algum outro meio?
Respostas:
Esta é uma maneira de aumentar todas as funções no namespace global com a função de sua escolha:
Uma desvantagem é que nenhuma função criada após a chamada
augment
terá o comportamento adicional.fonte
fn.apply(this, arguments);
parareturn fn.apply(this, arguments);
return
à função mais interna.Para mim, esta parece ser a solução mais elegante:
fonte
Método proxy para registrar chamadas de função
Há uma nova maneira de usar o Proxy para obter essa funcionalidade em JS. suponha que queremos ter um
console.log
sempre que uma função de uma classe específica for chamada:podemos substituir nossa instanciação de classe por um Proxy que substitui cada propriedade desta classe. tão:
verifique se isso realmente funciona no Codepen
Lembre-se de que usar
Proxy
oferece muito mais funcionalidade do que apenas registrar nomes de console.Além disso, este método funciona em Node.js também.
fonte
Se você quiser um registro mais direcionado, o código a seguir registrará as chamadas de função para um objeto específico. Você pode até mesmo modificar protótipos de objeto para que todas as novas instâncias também obtenham registro. Usei Object.getOwnPropertyNames em vez de for ... in, então ele funciona com classes ECMAScript 6, que não têm métodos enumeráveis.
fonte
Aqui estão alguns Javascript que substituem adiciona console.log a todas as funções em Javascript; Brinque com ele no Regex101 :
É um 'hack rápido e sujo', mas acho útil para depuração. Se você tiver muitas funções, tome cuidado, pois isso adicionará muito código. Além disso, o RegEx é simples e pode não funcionar para nomes / declarações de funções mais complexas.
fonte
Na verdade, você pode anexar sua própria função ao console.log para tudo o que carrega.
fonte