Gibt es eine Möglichkeit, eine Funktion dazu zu bringen, eine console.log-Anweisung auszugeben, wenn sie aufgerufen wird, indem irgendwo ein globaler Hook registriert wird (dh ohne die eigentliche Funktion selbst zu ändern) oder auf andere Weise?
97
Antworten:
Hier ist eine Möglichkeit, alle Funktionen im globalen Namespace mit der Funktion Ihrer Wahl zu erweitern:
Ein Nachteil ist, dass keine nach dem Aufruf erstellten Funktionen
augment
das zusätzliche Verhalten aufweisen.quelle
fn.apply(this, arguments);
zureturn fn.apply(this, arguments);
return
innersten Funktion hinzugefügt werden.Für mich scheint dies die eleganteste Lösung zu sein:
quelle
Proxy-Methode zum Protokollieren von Funktionsaufrufen
Es gibt eine neue Möglichkeit, Proxy zu verwenden, um diese Funktionalität in JS zu erreichen. Nehmen wir an, wir möchten eine haben,
console.log
wenn eine Funktion einer bestimmten Klasse aufgerufen wird:Wir können unsere Klasseninstanziierung durch einen Proxy ersetzen, der jede Eigenschaft dieser Klasse überschreibt. so:
Überprüfen Sie, ob dies in Codepen tatsächlich funktioniert
Denken
Proxy
Sie daran, dass die Verwendung viel mehr Funktionen bietet, als nur Konsolennamen zu protokollieren.Auch diese Methode funktioniert in Node.js auch.
quelle
Wenn Sie eine gezieltere Protokollierung wünschen, protokolliert der folgende Code Funktionsaufrufe für ein bestimmtes Objekt. Sie können sogar Objektprototypen so ändern, dass auch alle neuen Instanzen protokolliert werden. Ich habe Object.getOwnPropertyNames anstelle von for ... in verwendet, daher funktioniert es mit ECMAScript 6-Klassen, die keine aufzählbaren Methoden haben.
quelle
Hier ist etwas Javascript, das das Hinzufügen von console.log zu jeder Funktion in Javascript ersetzt. Spielen Sie damit auf Regex101 :
Es ist ein "schneller und schmutziger Hack", aber ich finde ihn nützlich zum Debuggen. Wenn Sie viele Funktionen haben, achten Sie darauf, dass dadurch viel Code hinzugefügt wird. Außerdem ist RegEx einfach und funktioniert möglicherweise nicht für komplexere Funktionsnamen / Deklarationen.
quelle
Sie können Ihre eigene Funktion für alles, was geladen wird, an console.log anhängen.
quelle