2009-02-20 10 views
5

posso procura una singola funzione in javascript facendo qualcosa di simile (appena annotò a memoria in modo da portare con me)Proxy dinamici in javascript?

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

Essendo un programmatore java mi piacerebbe pensare a questo come un proxy dinamico. Ogni volta che scrivo un codice come questo penso che lo di qualcuno debba aver creato una libreria davvero intelligente che fa le operazioni di proxy comune che è almeno il 10% migliore di quello che posso fare in fretta. Mi aspetterei che alcune cose come intercettare correttamente tutti i metodi per ogni dato oggetto, che potrebbe non essere del tutto banale. Poi ci sono diversi tipi di consigli. Quindi, mentre non mi aspetto qualcosa di simile alla dimensione di scriptaculous, è sicuramente più di 6 righe di codice.

Quindi dove sono queste librerie?

+0

Sarebbe utile sapere che cosa si sta cercando di raggiungere. – cletus

+0

Non li ho visti da solo, ma ho una tendenza NIH ... –

+0

Ancora non capisco: vuoi una libreria per salvare sei righe di codice? Le librerie sono ad alto costo in Javascript (mentre in C#/Java ti sembra di averle solo perché puoi). Non posso dire di aver mai avuto bisogno di scrivere un consiglio in Javascript. – cletus

risposta

4

Prova jQuery AOP plugin

Guardando il source sembra che solo utilizza jQuery come uno spazio dei nomi, così si potrebbe provare questo plug anche se non si vuole usa jQuery.

+0

Oooo. Sembra promettente. – krosenvold

0

Il fatto che tu sia stato in grado di farlo credo che significhi che esiste una libreria per ottenerla sotto forma di puro JavaScript, esempio precedente. Design Patterns possono essere applicati a JavaScript come sapete, quindi penso che il consiglio vorrei fornire a voi è la seguente da uno sviluppatore di Google e Yahoo GUI:

http://jsdesignpatterns.com/

Capitolo 14: Il pattern Proxy. Fai riferimento a una soluzione al tuo. Potresti ancora preferire il tuo approccio o potresti trovare suggerimenti dal loro approccio.

Cheers,

Andrew

+0

Grazie, ho messo il libro nel mio cestino della spesa Amazon. So come fare la maggior parte di queste cose, ma sono stufo di reinventare costantemente questa ruota. – krosenvold

+0

Lol, buon punto! :-) –

+0

Bella raccomandazione! Ho appena comprato l'e-book. –

0

Non penso che sia possibile intercettare tutte le funzioni.

Il meglio che puoi fare è iterare su tutti gli elementi di un oggetto e cercare eventuali funzioni:

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

Il problema è che se si aggiunge una funzione in seguito non è instradato attraverso il proxy.