Umsetzung Delegierten

Problem

  

Sie wollen ein Delegierter Architektur verwenden zu straffen, wie Ihr Code und Code Auseinandersetzungen zu vermeiden. Theory Beim Schreiben von JavaScript-Code wird sehr oft die Aufmerksamkeit kämpfen. Ein Beispiel-Code Kampf um die Aufmerksamkeit der window.onload Veranstaltung. Die window.onload Ereignis wird aufgerufen, sobald die HTML-Seite vollständig geladen und initialisiert. Wenn der Browser fordert window.onload, wird der Browser ein Skript gibt die Chance, sich mit einem vollständigen HTML-Seite zu initialisieren. Für Skript, ist diese Methode sehr interessant, und wenn es zwei Toolkits window.onload, eher als ein nicht die anderen zu überschreiben. Stellen Sie den folgenden Code ein Toolkit: window.onload = function geschrieben () (/ / initialize Toolkit 1) In diesem Codebeispiel wird das Toolkit sagt, dass, wenn die onload-Event aufgerufen wird, mein Funktionalität. Die zweite Toolkit im onload-Event interessiert wären die folgenden window.onload zuweisen: window.onload = function () (/ / initialize Toolkit 2) Die zweite Aufgabe arbeiten würde, aber es stellt sich die Frage, was geschieht mit der Initialisierung des Toolkit 1? Die Antwort ist, dass es nicht aufgerufen wird. Toolkits 1 und 2 kämpfen um die Aufmerksamkeit des onload-Event, and the winner is je nachdem, welche Toolkit weist das onload-Event dauern. Es gibt drei mögliche Lösungen für dieses Dilemma:

• Konvertieren der Toolkits zu Browser-spezifischen Tags verwenden, die sie zu verweisen erlauben onload mehrere Funktionen. Der Nachteil dieser Lösung ist, dass Sie den Browser-spezifischen Code zu schreiben, die den Kosten der Erhaltung des Codes erhöht.

• Verwenden Sie eine Funktion, die sowohl Anrufe initialisiert werden. Der Nachteil ist, dass Sie zu einer Funktion, die sowohl Initialisierungen verwaltet bieten.

• Konvertieren der Toolkits zu gut mit einander und überschreibt nicht die anderen Initialisierung spielen. Der Nachteil ist, dass die Toolkits haben, um herauszufinden, wie die anderen Initialisierungsroutinen nennen. Solution Wie bereits erwähnt, die Kehrseite der die erste Lösung im vorigen Abschnitt vorgestellt ist, dass es bestimmte Browser. Für Mozilla, ist die Lösung sehr elegant, weil es ein Delegierter Architektur implementiert. Für andere Browser, ist die erste Lösung nicht so elegant, und damit die endgültige Lösung ist eine Mischung aus der zweiten und dritten Lösungen. Für den Augenblick aber, let's focus auf die zweite Lösung, die wie folgt umgesetzt:

window.onload = function () (initializeToolkit1 (); initializeToolkit2 ();)

Die windows.onload Funktion ist eine Funktion zugewiesen, dass die Initialisierung Routinen des Toolkits 1 und 2 Anrufe. Die Lösung funktioniert, aber es ist die Wartung Probleme, da ein Entwickler hat hinzuzufügen oder zu entfernen Initialisierungsroutinen. Dies ist kein großes Problem, aber. Wenn Sie bei der Umsetzung der Funktion zu suchen, ist es die Umwandlung von einem einzigen Aufruf in zwei Funktionsaufrufe. Dies ist die Grundlage eines zu delegieren.

Die initializeToolkit1 und initializeToolkit2 Funktionen haben nichts miteinander zu tun, und wenn genannt, könnte jeder einfach zu denken, dass das die einzige Funktion, die Onload-Ereignis zugeordnet ist, getäuscht werden. Ein Delegierter ist nicht wie ein Proxy, da ein Delegierter fordert alle Funktionen, während ein Proxy wird eine Funktion aufrufen, und dann erwarten, dass die aufgerufene Funktion auf die andere Funktionen aufrufen. Von einer Umsetzung Perspektive, ein Delegierter hat eine sehr ähnliche Umsetzung zu einem Proxy-Server. Die JavaScript-Implementierung eines Delegierten wird von einer traditionellen zu delegieren unterscheiden, da gibt es kein einzelnes Objekt-Instanz die Verwaltung aller Referenzen. In einem klassischen delegieren Umsetzung, window.onload Aufruf der Funktion wird ein Delegierter Objekt-Struktur, die die verwaltete Funktion nennt Referenzen nennen. Im Falle des Beispiels, dass das Aufrufen der Delegierten Objekt-Struktur fordert initializeToolkit1 und initializeToolkit2 bedeutet. In der JavaScript-Anwendung übertragen, window.onload verweist auf ein Elternteil übertragen Funktion, die zwei Funktion Referenzen: func1 und func2 enthält. Die Muttergesellschaft übertragen Funktionsaufrufe sowohl func1 und func2. Wenn die Eltern delegieren Aufgaben Ketten zusammen sind, func1 (zur Illustration gewählt) verweist auf eine Funktion, die (initializeToolkit1) und func2 (wieder zur Illustration gewählt) auf den nächsten übergeordneten Delegation in der Kette. In den nächsten übergeordneten Delegation, eine Funktion verweist auf die Function Call (initializeFunction2), und die andere Funktion verweist auf eine andere Elternteil übertragen Funktion. Um die Serialisierung Problem zu verstehen, sich vorstellen, window.onload mit Referenzen serialisieren:

window.onload = function () (delegates.invoke (this, arguments);) var buffer = ops.serialize (window.onload);

In dem Beispiel., Window.onload auf eine Funktion verweist, dass die globale Variable delegates.invoke Methode, die die Funktionen initializeToolkit1 und initializeToolkit2 Anruf wird fordert Wenn wir den Zustand der HTML-Seite speichern, werden wir window.onload serialisieren, weil es ein Standard-Bezugspunkt. Doch Serialisierung window.onload nicht serialisieren Delegierten. Es serialisiert der Verweis auf die Delegierten, und damit, wenn die Seite neu erstellt werden, die Delegierten Beispiel wird fehlen. Sie können die vorstehenden Absatz gelesen und glaube, ich habe meine Tassen im Schrank, denn das ist nicht, wie Serialisierung erfolgt. Sie können die folgende Lösung zu implementieren, statt:

window.unload = function () (var buffer = (Delegierte) ops.serialize;) `

Bei dieser Lösung, die entladen Funktion aufgerufen wird, und ein Strom von Daten, die die Delegierten wird generiert darstellt. Aber ist diese Lösung tatsächlich korrekt? Ich behaupte, dass die Lösung des Problems der Delegierten Variable an eine andere Stelle delegiert, und es ist nicht alles lösen. Stellen Sie sich vor, zum Beispiel, dass Sie den Status einer Seite serialisiert werden. Wie Sie die Elemente durchlaufen, werden Sie generieren die zugehörigen Funktionen. So werden Sie window.load serialisieren und window.unload. Der große Vorteil dieses Ansatzes besteht darin, dass bei der Codierung mit einem Prototyp-basierte Sprache, die JavaScript Sie sich nicht über mehrere Implementierungen teilen die gleichen Hinweise besorgt. Mit Hilfe eines Value-Ansatz, können Sie eine Funktion von einem Objekt auf einen anderen kopieren und nicht über die Mixin Problem in Artikel 2-15 beschrieben machen. Nun, da Sie mit der Theorie hinter delegieren Umsetzung vertraut sind, lassen einen Blick auf die technischen Details .

 Quelle: / website / root / scripts / Jaxson / Common.js delegieren: function (instance, funcIdentifier, newfunc) (var delegatePrototype = function () (var func1 = __replace1; var func2 = __replace2; func1.apply (this, arguments); func2 . (this, arguments);) var origFunc; Anwendung, wenn (! Instanz [funcIdentifier]) (origFunc = function () ();) else (origFunc = Instanz [funcIdentifier];) Instanz [funcIdentifier] = Generics.expand (delegatePrototype , (__replace1: origFunc, __replace2: newfunc));) Quelle: / website / ROOT / Ajax / Javascript / exceptions.html window.onload = function () (window.onerror = function (msg, Datei-, Standort) (info ( "window.onerror1", "Nachricht (" + msg + " -Datei) ( "+ Datei +") Lage ( "+ location + ")");)) ops.delegate (window," onload ", function () (window.onerror = function (msg, Datei-, Standort) (info ( "window.onerror2", "Nachricht (" + msg + ")-Datei (" + Datei + ") Lage (" + location + ")");)));

Im Beispiel ist das window.onload-Funktion eine Funktion zugewiesen. Die nächste Zeile des Quellcodes ops.delegate verwendet die Methode aufrufen, um die zugewiesene Funktion in ein Delegierter zu konvertieren. Wenn also die window.onload Ereignis wird aufgerufen, die beiden Funktionen aufgerufen, die beide weisen window.onerror. Eine Folge mit Delegierten ist, dass ein Programmierer Delegierten nutzen könnten, aber vergessen, die Ressourcen, die sie weisen mit Delegierten werden auch geteilt werden. Daher wird ein guter Programmierer nicht window.onerror zuweisen, sondern ein Delegierter verwenden, um window.onerror zuweisen. Beim Schreiben von Code, in dem eine Methode oder eine Callback-Funktion muss geteilt werden, können Sie Delegaten verwenden, aber beachten Sie folgende Punkte beachten :

• Teilnehmer können Programmierer, ein Verfahren Callback-Aktien, aber sie sollten nicht davon ausgehen, dass die Ressourcen in ihrer Implementierung der Methode ausschließen.

• Die Delegierten das Problem zu lösen, wenn eine einzige Methode aufrufen, verwendet werden kann, um mehrere Methodenaufrufe zu machen.

• Die Delegierten können nicht zurückkehren, weil mehrere Methoden Werte Werte zurückgeben kann, daher sollten die Delegierten immer Code-Blöcke. Code-Blöcke sind von Natur aus einzelnen, mehrere oder kein Ergebnis orientiert. Mit Code-Blöcke erfordert nicht die Infrastruktur, die etwas Besonderes tun, wenn Daten zurückgegeben werden.

• Die Delegierten können unter Einsatz von Referenz-oder Wert Duck Typing, wobei der größte Unterschied zwischen ihnen wird die Fähigkeit, zu serialisieren.

Ein Artikel eingereicht von Sonja Lande


Disclaimer:Unsere Website ist nicht verantwortlich für den Inhalt dieses Artikels. Webarticles ist eine kostenlose Informationsquelle.
Wichtig: Dieser Artikel "Implementing Delegierten" wurde durch ein automatisches Software übersetzt. Wir fühlen uns leid für alle Rechtschreibfehler, die möglicherweise aufgetreten sind. Vielen Dank für Ihr Verständnis.


Online: 345 users browsing the articles directory