2009-02-20 18 views
5

puedo proxy de una sola función en javascript haciendo algo como esto (solo anotó desde la memoria de modo que tengan paciencia conmigo)Proxies dinámicos en javascript?

function addAroundAdvice(target){ 
    var targetFunction = target.aFunction; 
    target.aFunction = new function(){ 
      invokePreCall(); 
      targetFunction.apply(target, arguments); 
      invokePostCall(); 
    } 
} 

ser un programador de Java pensaría en esto como un proxy dinámico. Cada vez que escribo código como este, creo que alguien debe haber hecho una biblioteca realmente inteligente que realice las operaciones de proxying comunes que es al menos un 10% mejor de lo que puedo hacer a toda prisa. Esperaría algo así como interceptar correctamente todos los métodos para cualquier objeto dado, lo que puede no ser del todo trivial. Luego hay diferentes tipos de consejos. Entonces, aunque no estoy esperando algo del tamaño de scriptaculous, sin duda es más de 6 líneas de código.

Entonces, ¿dónde están estas bibliotecas?

+0

Sería de gran ayuda para saber lo que está tratando de lograr. – cletus

+0

No los he visto a mí mismo, pero tengo una tendencia NIH ... –

+0

Todavía no entiendo: ¿quiere una biblioteca para guardar 6 líneas de código? Las librerías son de alto costo en Javascript (mientras que en C#/Java parece que las tienes solo porque puedes). No puedo decir que alguna vez haya necesitado escribir consejos en Javascript tampoco. – cletus

Respuesta

4

Trate jQuery AOP plugin

Mirando el source parece que sólo utiliza jQuery como un espacio de nombres, por lo que podría probar este plugin de incluso si no quieren usa jQuery.

+0

Oooo. Parece prometedor. – krosenvold

0

El hecho de que haya podido hacerlo, creo que significa que hay una biblioteca para lograrlo en forma de JavaScript puro, es decir, el ejemplo anterior. Los patrones de diseño se pueden aplicar a JavaScript como saben, por lo que creo que el consejo que dar a usted es la siguiente por un desarrollador de Google y Yahoo GUI:

http://jsdesignpatterns.com/

Capítulo 14: El patrón de proxy. Referencia allí solución a la tuya. Aún puede preferir su enfoque o puede encontrar consejos de su enfoque.

Cheers,

Andrew

+0

Gracias, puse el libro en mi cesta de compras de amazon. Sé cómo hacer la mayoría de estas cosas, pero estoy harto de reinventar constantemente esta rueda. – krosenvold

+0

jajaja, buen punto! :-) –

+0

¡Buena recomendación! Acabo de comprar el e-book. –

0

No creo que pueda interceptar todas las funciones.

Lo mejor que puede hacer es iterar sobre todos los elementos de un objeto y buscar cualquier funciones:

for elem in someObject { 
    if typeof(elem) == "function" { 
     // replace the function 
    } 
} 

El problema es que si se agrega una función más adelante no se enruta a través del proxy.

Cuestiones relacionadas