Méthodes de mise en oeuvre du proxy

Problème Vous voulez une stratégie efficace pour la mise en œuvre des méthodes proxy. Théorie Le pattern proxy est définie comme une mise en œuvre d'une interface qui agit comme un pass-through pour la mise en œuvre réelle. Tout utilisateur de l'instance d'interface ne réalisera pas que un appel de méthode particulière est dérouté. La mise en œuvre complète de la configuration du proxy n'est pas l'objet de cet article, mais plutôt cet article se concentre sur l'application du modèle de procuration pour une seule méthode. Dans l'autre façon de câblage ainsi que deux méthodes, la méthode defined2 associé à l'instance de classe est câblé premier appel à la nouvelle méthode, et ensuite appeler la méthode originale. Dans cette forme de câblage, vous ne respectent pas le modèle de procuration que vous créez un modèle délégué. La principale différence entre un proxy et le modèle délégué, c'est que le modèle de procuration est responsable de la convocation de l'application d'origine, et le modèle délégué n'a pas cette restriction. Solution Maintenant que vous savez la différence entre les deux modèles et ce que vous voulez réaliser, Examinons ce que le code source devrait ressembler, et puis convertir cette source en une méthode générale. Considérons la déclaration de classe suivante.

 Source: / site / ROOT / articles ajax / javascript / DefinedClass fonction proxy.html () () DefinedClass.prototype.defined = function (tstvalue) (info ( "DefinedClass.defined", "paramètre (" + tstvalue + ") arguments count ( "+ + arguments.length ")"); DefinedClass.prototype.defined.value = 10; assertEquals (tstvalue, this.value);)
La classe DefinedClass est définie, et il a une méthode unique, défini. La méthode de niveau pattern proxy sera appliqué à définir. La méthode de remplacement qui est appelée avant la méthode originale est définie comme suit.
 Source: / site / ROOT / articles ajax / javascript / proxy.html var proxyfunc = function (tstValue, toCall, args) (info ( "proxyfunction", "paramètre (" tstValue + + ») a reçu arg count (" + + arguments.length ") Count arg origine (" + args.length + ")"); toCall.apply (this, args);)
  

Mise en oeuvre du proxy peut être un défi, parce que l'implémentation de la méthode actuelle (définie) doit être déplacé. Par la mise en œuvre pattern proxy, la fonction référencé par la variable proxyfunc doit être appelée avant l'implémentation de la méthode actuelle. La solution évidente consiste à assigner la méthode définie à la variable de référence proxyfunc, comme suit: DefinedClass.prototype.defined = proxyfunc Cette solution est bizarre, parce que la méthode originale n'est pas référencé par proxyfunc. La méthode original semble avoir disparu, et quand proxyfunc ne tente d'appeler la méthode originale, une erreur se produit. La méthode originale pourrait suivre une convention où l'implémentation de la méthode est référencée par une autre propriété:

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

proxyfunc, qui est responsable de convoquer l'implémentation d'origine selon la convention, sait que la méthode originale est stockée dans la propriété originalDefined. Alors, cela semble OK, mais en fait il ya un autre problème. Que faire si vous avez une méthode de remplacement d'une méthode de remplacement? Puisque la méthode originalDefined est déjà défini, ne vous écrasez et perdent la méthode originale pour être appelé? Une autre solution est d'étendre la convention à ce qui suit:

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

L'inconvénient de cette solution est que par la Convention, l'identificateur contient un certain nombre d'éléments d'identification d'origine. La convention exige qu'une méthode de remplacement spécifique soit placée à un endroit précis, sinon, la méthode de remplacement ne sait pas s'il faut appeler originalDefined ou orginalOriginalDefined. Un autre problème est, que faire si originalDefined référencé une méthode réelle? La solution à l'article méthode de remplacement n'est pas de créer de nouvelles propriétés, mais de créer des fonctions embarquées. Intégration de fonctions permet de déclarer une fonction qui n'est pas accessible de l'extérieur, et la méthode de remplacement peuvent être intégrées au sein d'une méthode de remplacement. Le code JavaScript généré suit:

DefinedClass.prototype.defined = function () (var origFunc = function (tstvalue) (info ( "DefinedClass.defined", "paramètre (" + tstvalue + ") arguments count (" + + arguments.length ")"); assertEquals (tstvalue, this.value);) args proxyFunc var = function (tstValue, toCall,) (info ( "proxyfunction", "paramètre (" tstValue + + ») a reçu 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 . push (arguments [c1]);) args.push (origFunc); args.push (arguments); proxyFunc.apply (this, args);)

 

Deux variables, origFunc et proxyFunc, fonctions de référence. La variable origFunc représente la mise en œuvre initiale de la méthode définie. La variable proxyFunc représente la méthode de remplacement qui est appelée avant la méthode originale. Ces deux fonctions sont intégrées dans une fonction qui est responsable de l'appel de la méthode proxy.

Intégrant les fonctions au sein d'une fonction ne nécessite pas la méthode de remplacement de savoir ce que la fonction originale est appelée. Pour chaque instance d'enrobage, il existe une méthode de remplacement et la méthode originale. La convention est que la méthode qui intègre les deux méthodes garde une trace de qui appelle qui et ce que les paramètres sont transmis autour.

Le rôle de la méthode parent est de gérer les références des méthodes intégrées, gérer l'instance cela, et de gérer les paramètres. La méthode mère gère les paramètres en considérant les arguments comme un type tableau. Le code JavaScript défini par l'objet arguments est un tableau d'arguments. La méthode parent va créer un nouvel ensemble d'arguments pour que la méthode de remplacement qui connaît la fonction à appeler et a la capacité de modifier les arguments fondés sur l'instance de l'objet original. Le but de créer un tableau d'arguments qui contient les arguments se rapporte à la déclaration de la méthode de remplacement, qui aura toujours comme des paramètres dernière, la méthode à appeler et des arguments. Enrobage d'une fonction dans une fonction a un problème: comment voulez-vous attribuer la référence dans la fonction de cette embarqué? JavaScript résout ce problème en fournissant à l'appliquer la méthode, qui est associée à un objet fonction.

un article présenté par Sonja Lande


Disclaimer:Notre site n'est pas responsable du contenu de cet article. Webarticles est une ressource d'information gratuite.
Important: Cet article "Mise en oeuvre du proxy méthodes" a été traduit par un logiciel automatique. Nous nous sentons désolés pour les fautes d'orthographe que mai ont eu lieu. Nous vous remercions de votre compréhension.


Online: 474 users browsing the articles directory