Durchführung der Proxy-Methoden

Problem Sie wollen eine wirksame Strategie für die Durchführung der Proxy-Methoden. Theory Das Proxy-Muster ist eine Implementierung einer Schnittstelle definiert, die als Pass-Through für die reale Umsetzung. Jeder Benutzer der Schnittstelle wird beispielsweise nicht klar, dass eine bestimmte Methode Anruf umgeleitet wird. Die vollständige Umsetzung des Proxy-Muster ist nicht der Schwerpunkt dieses Artikels, sondern konzentriert sich dieser Artikel auf die Anwendung des Proxy-Muster für eine einzelne Methode. In den alternativen Weg zur Vernetzung sowie zwei Methoden, die defined2 Methode, mit der Klasse-Instanz zugeordnet ist verkabelt zur ersten Aufruf der neuen Methode, und rufen Sie anschließend die ursprüngliche Methode. Bei dieser Form der Verkabelung, Sie sind nicht die Durchführung der Proxy-Muster, die Sie erstellen ein Modell übertragen. Der wesentliche Unterschied zwischen einem Proxy und Delegierter Modells ist, dass die Proxy-Modell für den Aufruf der ursprünglichen Implementierung verantwortlich ist, und der Delegierte Modell nicht haben diese Beschränkung. Solution Nun, da Sie den Unterschied zwischen den beiden Modellen und was Sie erreichen wollen, wollen wir untersuchen, was den Quellcode aussehen sollte, und konvertieren Sie diese Quelle zu einer allgemeinen Methode. Betrachten Sie die folgende Deklaration der Klasse.

 Quelle: / website / ROOT / Ajax / Javascript / proxy.html Funktion DefinedClass () () DefinedClass.prototype.defined = function (tstvalue) (info ( "DefinedClass.defined", "Parameter (" tstvalue + + ") Argumente zählen ( "+ + arguments.length ")"); DefinedClass.prototype.defined.value = 10; assertEquals (tstvalue, this.value);)
Die DefinedClass Klasse definiert ist, und es hat eine einzige Methode, definiert. Die Methode-Level-Proxy-Muster wird definiert angewandt werden. Der Proxy-Methode, die vor Ablauf der ursprünglichen definierte Methode aufgerufen wird, ist wie folgt.
 Quelle: / website / ROOT / Ajax / Javascript / proxy.html var proxyfunc = function (tstValue, toCall, args) (info ( "proxyfunction", "Parameter (" tstValue + + ") erhielt arg count (" + + arguments.length ") original arg count (" + args.length + ")"); toCall.apply (this, args);)
  

Die Umsetzung der Proxy kann eine Herausforderung sein, weil die derzeitige Implementierung der Methode (definiert) muss verschoben werden. Per Proxy-Muster der Umsetzung, hat die Funktion, durch die proxyfunc Variable verwiesen wird, bevor die aktuelle Implementierung der Methode aufgerufen werden. Die offensichtliche Lösung besteht darin, die definierte Methode, um die proxyfunc variablen Referenzzinssatz zuordnen, wie folgt: DefinedClass.prototype.defined = proxyfunc Diese Lösung ist skurril, weil die ursprüngliche Methode ist nicht von proxyfunc verwiesen wird. Die ursprüngliche Methode scheint verschwunden zu sein, und wenn proxyfunc nicht versuchen, die ursprüngliche Methode aufrufen, wird ein Fehler. Die ursprüngliche Methode könnte dann eine Konvention, wo die Implementierung der Methode wird durch eine andere Eigenschaft verwiesen:

DefinedClass.prototype.originalDefined = DefinedClass.prototype.defined; DefinedClass.prototype.defined = proxyfunc

proxyfunc, die für den Aufruf der ursprünglichen Implementierung über das Asylverfahren zuständig ist, weiß, dass die ursprüngliche Methode in der originalDefined Eigenschaft gespeichert ist. So scheint dies in Ordnung, aber in der Tat gibt es ein anderes Problem. Was passiert, wenn Sie einen Proxy-Methode eines Proxy-Methode? Da die originalDefined Methode bereits definiert ist, nicht überschreiben und Sie verlieren die ursprüngliche Methode genannt zu werden? Eine weitere Lösung ist die Vereinbarung der folgenden zu erweitern:

DefinedClass.prototype.originalOriginalDefined = DefinedClass.prototype.originalDefined; DefinedClass.prototype.originalDefined = DefinedClass.prototype.defined; DefinedClass.prototype.defined = proxyfunc

Der Nachteil dieser Lösung ist, dass je auf die Übereinkunft, die Kennung eine Reihe von Original-Kennzeichen enthält. Die Konvention schreibt vor, dass eine bestimmte Proxy-Methode an einer bestimmten Stelle platziert werden, andernfalls wird die Proxy-Methode nicht, ob sie originalDefined oder rufen Sie orginalOriginalDefined. Ein weiteres Problem ist, was ist, wenn originalDefined referenziert eine echte Methode? Die Lösung des Proxy-Methode Artikel ist nicht mit neuen Eigenschaften zu schaffen, sondern um eingebettete Funktionen erstellen. Einbetten von Funktionen ist es möglich, eine Funktion, die nicht von aussen zugänglich zu erklären, und der Proxy-Methode kann in einem Proxy-Methode eingebettet werden. Die generierten Javascript folgendermaßen:

DefinedClass.prototype.defined = function () (var origFunc = function (tstvalue) (info ( "DefinedClass.defined", "Parameter (" tstvalue + + ") Argumente zählen (" + + arguments.length ")"); assertEquals (tstvalue, this.value);) var proxyFunc = function (tstValue, toCall, args) (info ( "proxyfunction", "Parameter (" tstValue + + ") erhielt arg count (" arguments.length + + ") original arg count ( "+ args.length + ")"); toCall.apply (this, args);) var args = new Array (); for (var c1 = 0; c1 <arguments.length; c1 + +) (args . (arguments [c1 push]);) args.push (origFunc); args.push (arguments); proxyFunc.apply (this, args);)

 

Zwei Variablen, origFunc und proxyFunc, Referenz-Funktionen. Die origFunc Variable stellt die ursprüngliche Implementierung der definierten Methode. Die proxyFunc Variable stellt die Proxy-Methode, die vor Ablauf der ursprünglichen Methode aufgerufen wird. Beide Funktionen sind in einer Funktion eingebettet, dass für den Aufruf der Proxy-Methode verantwortlich ist.

Einbettung der Funktionen innerhalb einer Funktion erfordert nicht die Proxy-Methode zu wissen, was die ursprüngliche Funktion aufgerufen wird. Für jede Instanz von Einbettung, gibt es einen Proxy-Methode und die ursprüngliche Methode. Die Konvention ist, dass die Methode, bettet die zwei Methoden verfolgt, die fordert, wen und welche Parameter übergeben werden, um.

Die Rolle der Eltern besteht darin, die Verweise auf die eingebettete Methoden zu verwalten, verwalten diesem Fall und Verwaltung der Parameter. Der Stamm-Methode verwaltet die Parameter unter Berücksichtigung der Argumente wie ein Array-Typ. Die JavaScript-Objekt definiert Argumente ist ein Array von Argumenten. Der Stamm-Methode wird eine neue Reihe von Argumenten zu schaffen, damit der Proxy-Methode weiß, welche Funktion aufgerufen werden, und hat die Fähigkeit, die Argumente, auf das ursprüngliche Objekt beispielsweise auf der Grundlage zu ändern. Das Ziel der Schaffung einer Reihe von Argumenten, dass die Argumente enthält, bezieht sich auf die Erklärung der Proxy-Methode, die immer als letzte Parameter der Methode haben wird und Argumente zu nennen. Einbetten einer Funktion innerhalb einer Funktion hat ein Problem: Wie ordnen Sie die diese Beziehung in der Embedded-Funktion? JavaScript löst dieses Problem, indem sie die Methode anwenden, die mit einem Funktions-Objekt zugeordnet ist.

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 "Durchführung der Proxy-Methoden" 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: 490 users browsing the articles directory