Fonction crochets Javascript
EDIT: OK, je crois que les solutions suivantes sont valides:
- Utiliser le jQuery AOP plugin. Essentiellement, il enveloppe le vieux de la fonction en collaboration avec le crochet dans une fonction sandwich et réassigne à l'ancien nom de la fonction. Cela provoque l'imbrication de fonctions avec chaque nouveau crochet.
Si jQuery n'est pas utilisable pour vous, il suffit de le pillage du code source, il ne semble pas y avoir de jQuery dépendances dans le plugin, et la source est simple et très petite. - Ont un objet décrivant tous les crochets et leurs objectifs, et de stocker le initiale non modifiée de la fonction. Lors de l'ajout d'un nouveau raccordement, de l'emballage à refaire autour de la fonction d'origine, au lieu de ré-enrouler le précédent habillage de la fonction.
De vous échapper de fonctions imbriquées, et obtenir deux objets à manipuler à la place. Potentiellement, cela pourrait également signifier plus facile crochet de manutention, si vous ajoutez/supprimez les crochets souvent et de commande.
Je vais aller avec le premier, puisque c'est déjà fait, et je n'ai pas de performance à s'inquiéter. Et depuis que les fonctions ne sont pas affectées, même si je passe accrochage méthodes, je vais seulement besoin de refaire le crochet en ajoutant, ce qui pourrait être juste une simple recherche&remplacer des opérations.
Salut,
Est-il possible de créer un mécanisme, dans lequel la fonction A aurait pu avoir un jeu de crochets(les fonctions à exécuter avant/après de la fonction A)?
Idéalement, la fonction ne serait pas conscient de l'accrochage de la fonctionnalité, de sorte que je n'ai pas à modifier le code source de la fonction à appeler les crochets. Quelque chose comme:
A = function(){
alert("I'm a naive function");
};
B = function(){
alert("I'm having a piggyback ride on function A!"+
"And the fool doesn't even know it!");
};
addHook(B, A)//add hook B to function A
A()
//getting alerts "I'm a naive function"/"I'm having a
//piggyback ride on function A! And the fool doesn't even know it!"
J'ai essayé de pirater quelque chose pour un couple d'heures, mais jusqu'à présent aucune chance.
source d'informationauteur Seyen
Vous devez vous connecter pour publier un commentaire.
Prendre un coup d'oeil à jQuery plugin AOP. En général, google "javascript aspect oriented programming".
Peut-être pas assez, mais il semble fonctionner...
Réponse très simple:
Cette réponse n'est pas définitive, mais plutôt de démonstration d'une technique différente que ceux proposés jusqu'à présent. Il exploite le fait qu'une fonction en Javascript est un de première classe de l'objet, et en tant que tel, un), vous pouvez passer en tant que valeur à une autre fonction, et b) vous pouvez ajouter des propriétés. Combiner ces traits de caractère avec la fonction intégrée dans le "call" (ou "appliquer") des méthodes, et vous avez vous-même un début vers une solution.
La fonction suivante vous donnera avant et après les crochets qui peuvent être empilés. Donc, si vous avez un certain nombre de fonctions qui ont besoin de courir avant la fonction donnée ou après la fonction donnée alors ce serait une solution de travail. Cette solution ne nécessite pas de jQuery et utilisant les méthodes de tableau (pas de cales nécessaires). Il doit également être sensible au contexte, donc si vous êtes à l'appel de la fonction originale avec un contexte si devez exécuter chaque avant et après la fonction de la même manière.
Voici ce que j'ai fait, pourrait être utile dans d'autres applications comme ceci:
Je ne sais pas si ce sera utile. Vous avez besoin de modifier la fonction d'origine, mais une seule fois et vous n'avez pas à garder à l'éditer pour la cuisson de crochets
https://github.com/rcorp/hooker