Der Hauptgrund, warum ich es möchte, ist, dass ich meine Initialisierungsfunktion erweitern möchte.
Etwas wie das:
// main.js
window.onload = init();
function init(){
doSomething();
}
// extend.js
function extends init(){
doSomethingHereToo();
}
Ich möchte also eine Funktion wie eine Klasse in PHP erweitern.
Und ich möchte es auch von anderen Dateien aus erweitern, so dass ich zum Beispiel die ursprüngliche Init-Funktion in main.js
und die erweiterte Funktion in habe extended.js
.
javascript
function
extend
Adam
quelle
quelle
Antworten:
Ich bin mir sicher, dass wir Ihnen eine bessere Antwort geben können als die wörtliche Antwort auf Ihre Frage.
Aber hier ist eine wörtliche Antwort:
Wenn Sie diese Funktionen irgendwo einer Eigenschaft zuweisen, können Sie die ursprüngliche Funktion umbrechen und stattdessen Ihren Ersatz in die Eigenschaft einfügen:
Wenn sich Ihre Funktionen noch nicht in einem Objekt befinden, möchten Sie sie wahrscheinlich dort ablegen, um die oben genannten Funktionen zu vereinfachen. Zum Beispiel:
Aber es gibt so bessere Möglichkeiten, das zu tun. Wie zum Beispiel das Bereitstellen eines Mittels zum Registrieren von
init
Funktionen.(Vieles davon könnte etwas kompakter geschrieben werden, aber ich wollte eindeutige Namen wie
publicSymbols
mein üblichespubs
oder anonymes Objektliteral verwenden. Sie können es viel kompakter schreiben, wenn Sie anonyme Funktionen haben möchten, aber ich nicht. t viel Sorgfalt für anonyme Funktionen .)quelle
Es gibt verschiedene Möglichkeiten, dies zu tun. Es hängt davon ab, was Ihr Zweck ist. Wenn Sie nur die Funktion ausführen möchten und im selben Kontext, können Sie Folgendes verwenden
.apply()
:Wenn Sie es durch ein neueres ersetzen möchten,
init
sieht es folgendermaßen aus:quelle
.call
Methode anstelle von.apply
. Siehe diese StackOverflow-Frage.Die anderen Methoden sind großartig, aber sie behalten keine Prototypfunktionen bei, die an init angehängt sind. Um dies zu umgehen, können Sie Folgendes tun (inspiriert von dem Beitrag von Nick Craver).
quelle
Eine andere Option könnte sein:
quelle
Das ist sehr einfach und unkompliziert. Schauen Sie sich den Code an. Versuchen Sie, das Grundkonzept der Javascript-Erweiterung zu verstehen.
Lassen Sie uns zunächst die Javascript-Funktion erweitern.
Sie können diese Funktion erweitern, indem Sie die untergeordnete Funktion folgendermaßen erstellen
Jetzt können Sie die untergeordnete Funktion wie folgt verwenden:
Wir können auch eine Javascript-Funktion erstellen, indem wir Javascript-Klassen wie diese erweitern.
Erweitern wir diese Klasse mit der Child-Funktion wie folgt:
Wieder können Sie die untergeordnete Funktion wie folgt verwenden, um ein ähnliches Ergebnis zu erhalten:
Javascript ist eine sehr einfache Sprache. Wir können fast alles machen. Happy JavaScripting ... Ich hoffe, ich konnte Ihnen eine Idee geben, die Sie in Ihrem Fall verwenden können.
quelle
Verwenden Sie verlängernFunction.js
In Ihrem speziellen Fall ist es jedoch einfacher, die globale Onload-Funktion zu erweitern:
Ihre Frage gefällt mir wirklich gut, sie lässt mich über verschiedene Anwendungsfälle nachdenken.
Bei Javascript-Ereignissen möchten Sie wirklich Handler hinzufügen und entfernen. Wie können Sie bei ExtendFunction später Funktionen entfernen ? Ich könnte erweiterten Funktionen leicht eine .revert-Methode hinzufügen,
init = init.revert()
um die ursprüngliche Funktion zurückzugeben. Natürlich könnte dies zu einem ziemlich schlechten Code führen, aber vielleicht können Sie damit etwas erledigen, ohne einen fremden Teil der Codebasis zu berühren.quelle