Existe-t-il un moyen de faire en sorte qu'une fonction génère une instruction console.log lorsqu'elle est appelée en enregistrant un hook global quelque part (c'est-à-dire sans modifier la fonction elle-même) ou via un autre moyen?
97
Réponses:
Voici un moyen d'augmenter toutes les fonctions de l'espace de noms global avec la fonction de votre choix:
Un inconvénient est qu'aucune fonction créée après l'appel
augment
n'aura le comportement supplémentaire.la source
fn.apply(this, arguments);
enreturn fn.apply(this, arguments);
return
à la fonction la plus profonde.Quant à moi, cela ressemble à la solution la plus élégante:
la source
Méthode proxy pour enregistrer les appels de fonction
Il existe une nouvelle façon d'utiliser Proxy pour obtenir cette fonctionnalité dans JS. supposons que nous voulons avoir une
console.log
chaque fois qu'une fonction d'une classe spécifique est appelée:nous pouvons remplacer notre instanciation de classe par un proxy qui remplace chaque propriété de cette classe. alors:
vérifier que cela fonctionne réellement dans Codepen
N'oubliez pas que l'utilisation
Proxy
vous offre beaucoup plus de fonctionnalités que la simple journalisation des noms de console.De plus , cette méthode fonctionne en Node.js aussi.
la source
Si vous souhaitez une journalisation plus ciblée, le code suivant consignera les appels de fonction pour un objet particulier. Vous pouvez même modifier les prototypes d'objets afin que toutes les nouvelles instances soient également enregistrées. J'ai utilisé Object.getOwnPropertyNames au lieu de for ... in, donc cela fonctionne avec les classes ECMAScript 6, qui n'ont pas de méthodes énumérables.
la source
Voici du Javascript qui remplace ajoute console.log à chaque fonction en Javascript; Jouez avec sur Regex101 :
C'est un «hack rapide et sale» mais je le trouve utile pour le débogage. Si vous avez beaucoup de fonctions, méfiez-vous car cela ajoutera beaucoup de code. En outre, le RegEx est simple et peut ne pas fonctionner pour des noms / déclarations de fonctions plus complexes.
la source
Vous pouvez en fait attacher votre propre fonction à console.log pour tout ce qui se charge.
la source