2009-02-20 4 views
5

je peux proxy une seule fonction javascript en faisant quelque chose comme ça (juste griffonné vers le bas de la mémoire si ours avec moi)Les proxies dynamiques en javascript?

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

être un programmeur java je pense que cela comme un proxy dynamique. Chaque fois que j'écris un code comme celui-ci je pense que quelqu'un doit avoir fait une bibliothèque vraiment intelligente qui fait les opérations de proxying communes qui est au moins 10% meilleure que ce que je peux faire rapidement. Je m'attendrais à ce que certaines choses interceptent correctement toutes les méthodes pour un objet donné, ce qui n'est peut-être pas trivial. Ensuite, il y a différents types de conseils. Donc, même si je ne m'attends pas à quelque chose de la taille d'un scriptaculous, c'est certainement plus de 6 lignes de code.

Alors où sont ces bibliothèques?

+0

Il serait utile de savoir ce que vous essayez d'atteindre. – cletus

+0

Je ne les ai pas vus moi-même, mais j'ai une tendance NIH ... –

+0

Je ne comprends toujours pas: vous voulez une bibliothèque pour vous sauver 6 lignes de code? Les bibliothèques coûtent cher en Javascript (alors qu'en C#/Java vous semblez les avoir juste comme vous le pouvez). Je ne peux pas dire que j'ai jamais eu besoin d'écrire des conseils en Javascript non plus. – cletus

Répondre

4

Essayez jQuery AOP plugin

En regardant le source il semble que utilise uniquement jQuery comme un espace de noms, de sorte que vous pouvez essayer ce plugin même si vous ne voulez pas utilisez jQuery.

+0

Oooo. Cela semble prometteur. – krosenvold

0

Le fait que vous ayez été capable de le faire Je pense que cela signifie qu'il existe une bibliothèque pour y parvenir sous la forme de JavaScript pur, c'est-à-dire votre exemple ci-dessus. Modèles de conception peuvent être appliquées à JavaScript comme vous le savez, je pense que le conseil que je vous fournir est la suivante par un développeur GUI Google et Yahoo:

http://jsdesignpatterns.com/

Chapitre 14: Le modèle Proxy. Référence là solution à la vôtre. Vous pouvez toujours préférer votre approche ou vous pouvez trouver des conseils de leur approche.

Cheers,

Andrew

+0

Merci, j'ai mis le livre dans mon panier d'achat Amazon. Je sais comment faire la plupart de ces choses, mais j'en ai marre de réinventer constamment cette roue. – krosenvold

+0

Lol, bon point! :-) –

+0

Belle recommandation! Je viens d'acheter le livre électronique. –

0

Je ne pense pas que vous pouvez intercepter toutes les fonctions.

Le mieux que vous pouvez faire est itérer sur tous les éléments d'un objet et rechercher toutes les fonctions:

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

Le problème est que si vous ajoutez une fonction plus tard, il est ne passe pas par le proxy.

Questions connexes