Métodos de execução Proxy

Problema Você deseja uma estratégia eficaz para a aplicação de métodos de proxy. Teoria O padrão proxy é definido como uma implementação de uma interface que funciona como uma passagem para a implementação real. Qualquer usuário da instância de interface não vai perceber que uma chamada de método particular está sendo redirecionado. A implementação completa do padrão Proxy não é o foco deste artigo, em vez disso, este artigo focaliza a aplicação do padrão proxy para um único método. Na forma alternativa de fiação junto dois métodos, o método defined2 associado com a instância da classe é com fios primeira chamada para o novo método, e depois chamar o método original. Nesta forma de ligação, você não é implementar o padrão Proxy você está criando um modelo de delegação. A principal diferença entre um proxy e modelo de delegado é de que o modelo de proxy é responsável por chamar a implementação original, eo modelo delegado não tem essa restrição. Solução Agora que você sabe a diferença entre os dois modelos eo que você quer alcançar, Vamos examinar o que o código fonte deve olhar como, e em seguida, converter essa fonte em um método geral. Considere a seguinte declaração de classe.

 Fonte: / website / ROOT / artigos ajax / javascript / DefinedClass função proxy.html () () DefinedClass.prototype.defined = function (tstvalue) (info ( "DefinedClass.defined", o parâmetro "(" + tstvalue + ") contagem de argumentos ( "+ + arguments.length ")"); DefinedClass.prototype.defined.value = 10; assertEquals (tstvalue, this.value);)
A classe DefinedClass é definido, e tem um método único, definido. O método de nível padrão Proxy será aplicada a definir. O método de proxy que é chamado antes o método original é definida como se segue.
 Fonte: / website / ROOT / artigos ajax / javascript / proxy.html var proxyfunc = function (tstValue, toCall, args) (info (proxyfunction "," parâmetro ( "+ tstValue +") recebeu arg count ( "+ + arguments.length ") count arg original (" + args.length + ")"); toCall.apply (this, args);)
  

Aplicar o proxy pode ser um desafio, porque a implementação do método atual (definida) tem de ser movida. Per a implementação do padrão Proxy, a função referenciado pela variável proxyfunc tem de ser chamado antes da implementação do método atual. A solução óbvia é a de atribuir o método definido para a referência proxyfunc variável, como segue: DefinedClass.prototype.defined = proxyfunc Esta solução é peculiar, pois o método original não é referenciado por proxyfunc. O método original parece ter desaparecido, e quando não proxyfunc tentativa de chamar o método original, ocorrerá um erro. O método original poderia seguir uma convenção em que a implementação do método é referenciado por outro imóvel:

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

proxyfunc, que é responsável por chamar a implementação original usando convenção, sabe que o método original é armazenado na propriedade originalDefined. Portanto, esta parece OK, mas na verdade não existe um outro problema. E se você tem um método de proxy de um método de proxy? Como o método originalDefined já está definido, você substituir e perder o método original para ser chamado? Outra solução é estender a convenção para o seguinte:

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

A desvantagem desta solução é que por a convenção, o identificador contém um número de identificadores original. A convenção prevê que um método de procuração específica ser colocado em um local específico, caso contrário, o método de proxy não sabe se chamar originalDefined ou orginalOriginalDefined. Outro problema é, que se originalDefined referência a um método real? A solução para o artigo método de proxy não é criar novas propriedades, mas para criar funções incorporadas. Incorporação de funções faz com que seja possível declarar uma função que não é acessível externamente, eo método de proxy pode ser incorporado dentro de um método de proxy. O JavaScript gerado segue:

DefinedClass.prototype.defined = function () (var origFunc = function (tstvalue) (info ( "DefinedClass.defined", o parâmetro "(" + tstvalue + ") contagem de argumentos (" + + arguments.length ")"); assertEquals (tstvalue, this.value);) proxyFunc var args = function tstValue (, toCall,) (info (proxyfunction "," parâmetro ( "+ tstValue +") recebeu arg count ( "+ arguments.length +") original arg contagem ( "+ args.length + ")"); toCall.apply (this, args);) var args = new Array (); for (var c1 = 0; c1 <arguments.length; c1 + +) (args . push (argumentos [c1]);) args.push (origFunc); args.push (arguments); proxyFunc.apply (this, args);)

 

Duas variáveis, origFunc e proxyFunc funções, de referência. A variável origFunc representa a implementação original do método definido. A variável proxyFunc representa o método de proxy que é chamado antes do método original. Ambas as funções são incorporados em uma função que é responsável por chamar o método de proxy.

Incorporando as funções dentro de uma função não exige que o método de proxy para saber o que a função original é chamado. Para cada instância de incorporação, não há um método de proxy e do método original. A convenção é que o método que incorpora os dois métodos controla a quem chama quem e quais parâmetros são passados ao redor.

O papel da mãe é o método para gerir as referências dos métodos embutidos, gerenciar a instância desta, e controlar os parâmetros. O método mãe gerencia os parâmetros, considerando os argumentos como um tipo de matriz. O JavaScript definido argumentos objeto é um array de argumentos. O método mãe irá criar um novo conjunto de argumentos para que o método de proxy sabe qual função a ser chamada e tem a capacidade de modificar os argumentos baseados na instância do objeto original. A finalidade de criar uma matriz de argumentos que contém os argumentos refere-se à declaração do método de proxy, que terá sempre como seus parâmetros passado, o método para chamar e argumentos. Embedding uma função dentro de uma função tem um problema: como é que você atribui a referência a isso em função incorporada? JavaScript resolve este problema através da prestação de aplicar o método, que está associado com uma função de objeto.

um artigo submetido por Sonja Lande


Isenção de responsabilidade:O nosso site não se responsabiliza pelo conteúdo deste artigo. Webarticles é uma fonte de informação livre.
Importante: Este artigo "Aplicação de Métodos de Proxy" foi traduzida por um software automático. Nós sentimos muito por quaisquer erros de ortografia que pode ter ocorrido. Obrigado pela sua compreensão.


Online: 250 users browsing the articles directory