Ich versuche, eine vorhandene JS-Bibliothek anzupassen, ohne den ursprünglichen JS-Code zu ändern. Dieser Code wird in einige externe JS-Dateien geladen, auf die ich Zugriff habe. Ich möchte eine der in der Originaldatei enthaltenen Funktionen ändern, ohne das Ganze zu kopieren und in die zweite JS-Datei einzufügen.
So könnte beispielsweise das Off-Limits-JS eine Funktion wie die folgende haben:
var someFunction = function(){
alert("done");
}
Ich möchte in der Lage sein, JS-Code irgendwie an diese Funktion anzuhängen oder voranzustellen. Der Grund ist in erster Linie, dass die Funktion in der ursprünglichen unberührbaren JS ziemlich groß ist und wenn diese JS jemals aktualisiert wird, ist die Funktion, mit der ich sie überschreibe, veraltet.
Ich bin mir nicht ganz sicher, ob dies möglich ist, aber ich dachte, ich würde es überprüfen.
quelle
Antworten:
Wenn
someFunction
es global verfügbar ist, können Sie die Funktion zwischenspeichern, eine eigene erstellen und von Ihrer Funktion aufrufen lassen.Also, wenn dies das Original ist ...
Du würdest das tun ...
Hier ist die Geige
Beachten Sie, dass ich
.apply
die zwischengespeicherte Funktion aufrufe. Auf diese Weise kann ich den erwarteten Wert von beibehaltenthis
und alle übergebenen Argumente als einzelne Argumente übergeben, unabhängig davon, wie viele vorhanden waren.quelle
apply
: Dies ist die einzige Antwort, die das Problem wirklich löst.funciton
Schlüsselwort von JavaScript nicht ? ;) Danke für die Bearbeitung.apply()
. Aber wenn es ein Array-ähnliches Objekt wäre, wie zum Beispiel ein jQuery-Objekt, dann würden einige Browser einen FehlerSpeichern Sie zuerst die eigentliche Funktion in einer Variablen.
dann definieren Sie Ihre eigenen:
quelle
apply
sie aufrufen. Siehe ams Antwort.someFunction
mitwindow.someFunction
in dem obigen Code. Der Grund dafür ist, dass meine Funktion in einem JQuery-$(document).ready()
Handler deklariert wurde .Sie können eine Funktion erstellen, die Ihren Code aufruft und dann die Funktion aufruft.
quelle
Ich weiß nicht, ob Sie die Funktion aktualisieren können, aber je nachdem, wie auf sie verwiesen wird, können Sie an ihrer Stelle eine neue Funktion erstellen:
quelle
Ebenfalls. Wenn Sie den lokalen Kontext ändern möchten, müssen Sie die Funktion neu erstellen. Beispielsweise:
Jetzt
Dann
Und
Dies ist jedoch nur das einfachste Beispiel. Es wird noch viel Arbeit erfordern, um mit Argumenten, Kommentaren und Rückgabewerten umzugehen. Darüber hinaus gibt es noch viele Fallstricke.
toString | Scheibe | indexOf | lastIndexOf | neue Funktion
quelle
Das Proxy-Muster (wie von user1106925 verwendet) kann in eine Funktion eingefügt werden. Die unten beschriebene Funktion bezieht sich auf Funktionen, die nicht im globalen Bereich liegen, und sogar auf Prototypen. Sie würden es so verwenden:
Im folgenden Snippet können Sie sehen, wie ich die Funktion zum Erweitern von test.prototype.doIt () verwende.
quelle