Modalità di attuazione ProxyProblema che si desidera una strategia efficace per attuare metodi proxy. Theory Il pattern Proxy è definito come l'implementazione di un'interfaccia che agisce come un pass-through per l'attuazione reale. Ogni utente dell'istanza interfaccia non si rende conto che una particolare chiamata di metodo è in corso un dirottamento. La piena attuazione del pattern Proxy non è il focus di questo articolo, anzi, in questo articolo si concentra su come applicare il pattern Proxy per un singolo metodo. In modo alternativo di cablaggio insieme due metodi, il metodo defined2 associato con l'istanza di classe è cablata a chiamare prima il nuovo metodo, e quindi chiamare il metodo originale. In questa forma di cablaggio, non si attua il pattern Proxy si sta creando un modello delegato. La differenza principale tra un proxy e il modello di delega è che il modello di delega è responsabile per chiamare l'implementazione originale, e il modello delegato non ha tale limitazione. Solution Ora che sapete la differenza tra i due modelli e ciò che si vuole raggiungere, Esaminiamo ciò che il codice sorgente dovrebbe essere simile, e poi convertire questa fonte in un metodo generale. Si consideri la seguente dichiarazione di classe. Fonte: / website / ROOT / articles ajax / javascript / DefinedClass funzione proxy.html () () DefinedClass.prototype.defined = function (tstvalue) (info ( "DefinedClass.defined", "il parametro (" tstvalue + + ") argomenti count ( "+ + arguments.length ")"); DefinedClass.prototype.defined.value = 10; assertEquals (tstvalue, this.value);)La classe DefinedClass è definita, e ha un unico metodo, definito. Il metodo livello pattern Proxy sarà applicato a definire. Il metodo proxy che viene chiamato prima il metodo originale definito è il seguente. Fonte: / website / ROOT / articles ajax / javascript / proxy.html var proxyfunc = function (tstValue, toCall, args) (info ( "proxyfunction", "il parametro (" tstValue + + ") ha ricevuto arg count (" arguments.length + + ") count ARG originale (" + args.length + ")"); toCall.apply (this, args);)
Attuazione della delega può essere una sfida, perché l'implementazione attuale metodo (definito) deve essere spostato. Per l'attuazione del modello Proxy, la funzione a cui fa riferimento la variabile proxyfunc deve essere chiamata prima che l'attuale implementazione del metodo. La soluzione più ovvia è quella di assegnare il metodo definito al riferimento proxyfunc variabile, come segue: DefinedClass.prototype.defined = proxyfunc Questa soluzione è stravagante, perché il metodo originale non fa riferimento proxyfunc. Il metodo originale sembra essere scomparsa, e quando proxyfunc si tenta di chiamare il metodo originale, verrà generato un errore. Il metodo originale potrebbe seguire una convenzione in cui l'implementazione del metodo viene fatto riferimento da un altro immobile: DefinedClass.prototype.originalDefined = DefinedClass.prototype.defined; DefinedClass.prototype.defined = proxyfunc proxyfunc, che è responsabile per chiamare l'implementazione originale usando convenzione, sa che il metodo originale è conservato nella proprietà originalDefined. Perciò questo sembra OK, ma in realtà c'è un altro problema. Che cosa succede se si dispone di un metodo proxy di un metodo proxy? Dato che il metodo originalDefined è già definito, non si sovrascrive e perdere il metodo originale per essere chiamato? Un'altra soluzione è quella di estendere la convenzione di seguito: DefinedClass.prototype.originalOriginalDefined = DefinedClass.prototype.originalDefined; DefinedClass.prototype.originalDefined = DefinedClass.prototype.defined; DefinedClass.prototype.defined = proxyfunc L'aspetto negativo di questa soluzione è che per la convenzione, l'identificatore contiene una serie di identificatori originale. La convenzione prevede che un metodo specifico proxy essere collocato in un luogo specifico, in caso contrario, il metodo proxy non sa se chiamare originalDefined o orginalOriginalDefined. Un altro problema è, che cosa se originalDefined riferimento a un metodo reale? La soluzione alla voce proxy metodo non è quello di creare nuove proprietà, ma per creare le funzioni incorporate. Incorporare le funzioni permette di dichiarare una funzione che non è accessibile dall'esterno, e il metodo proxy può essere incorporato all'interno di un metodo proxy. Generato JavaScript segue: DefinedClass.prototype.defined = function () (var origFunc = function (tstvalue) (info ( "DefinedClass.defined", "il parametro (" tstvalue + + ") argomenti count (" + + arguments.length ")"); assertEquals (tstvalue, this.value);) proxyFunc var args = function (tstValue, toCall,) (info ( "proxyfunction", "il parametro (" tstValue + + ") ha ricevuto arg count (" arguments.length + + ") originale arg count ( "+ args.length + ")"); toCall.apply (this, args);) var args = new Array (); for (var c1 = 0; c1 <arguments.length; c1 + +) (args . push (argomenti [c1]);) args.push (origFunc); args.push (argomenti); proxyFunc.apply (this, args);)
Due variabili, origFunc e proxyFunc, le funzioni di riferimento. La variabile origFunc rappresenta l'implementazione originale del metodo definito. La variabile proxyFunc rappresenta il metodo proxy che viene chiamato prima il metodo originale. Entrambe le funzioni sono integrate in una funzione che è responsabile per la chiamata al metodo proxy. Incorporare le funzioni all'interno di una funzione non richiede il metodo proxy di sapere quale sia la funzione originale è chiamato. Per ogni istanza di inserimento, vi è un metodo proxy e il metodo originale. La convenzione è che il metodo che incorpora i due metodi tiene traccia di chi chiama chi e quali parametri vengono passati in giro. Il ruolo del genitore è il metodo per gestire i riferimenti dei metodi embedded, gestire l'istanza di questo, e gestire i parametri. Il metodo genitore gestisce i parametri da considerare gli argomenti come un tipo matrice. Il codice JavaScript definito gli argomenti oggetto è un array di argomenti. Il metodo genitore creerà una nuova serie di argomenti in modo che il metodo proxy sa che la funzione di chiamata e ha la capacità di modificare gli argomenti basati sulla istanza originale dell'oggetto. L'obiettivo di creare una serie di argomenti che contiene gli argomenti riguarda la dichiarazione del metodo di proxy, che avrà sempre come parametri l'ultima chiamata per il metodo e gli argomenti. Incorporare una funzione all'interno di una funzione ha un problema: come si assegnano il riferimento a questa funzione incorporata? JavaScript risolve questo problema fornendo le applicare il metodo, che è associato a un oggetto funzione. un articolo presentato da Sonja Lande Disclaimer:Il nostro sito non è responsabile per il contenuto di questo articolo. Webarticles è una risorsa gratuita di informazioni. Importante: Questo articolo "Attuazione Proxy Methods" è stato tradotto da un software automatico. Ci dispiace per eventuali errori di ortografia che possono essersi verificati. Grazie per la vostra comprensione.
|
|||||
| Online: 345 users browsing the articles directory |
|
|