EDIT: OK, je crois que les solutions suivantes sont valables:crochets fonction Javascript
Utilisez le plugin AOP jQuery. Il enroule l'ancienne fonction avec le crochet dans une fonction sandwich et la réattribue à l'ancien nom de la fonction. Cela provoque l'imbrication des fonctions avec chaque nouveau hook ajouté.
Si jQuery n'est pas utilisable pour vous, il suffit de piller le code source, il ne semble pas y avoir de dépendances jQuery dans le plugin, et la source est simple et très petite. Avoir un objet décrivant tous les hooks et leurs cibles et un pour stocker la fonction initiale non modifiée. Lors de l'ajout d'un nouveau hook, le wrapping serait refait autour de la fonction d'origine, au lieu de réenvelopper la fonction d'emballage précédente.
Vous pouvez échapper des fonctions imbriquées et obtenir deux objets à gérer à la place. Potentiellement, cela pourrait également signifier une manipulation plus facile du crochet, si vous ajoutez/retirez des crochets souvent et hors service.
Je vais aller avec le premier, puisque c'est déjà fait, et je n'ai pas de problème à se soucier. Et puisque les fonctions d'origine ne sont pas affectées, même si je change de méthodes d'accrochage, je n'aurai besoin de refaire l'ajout de crochet, qui pourrait être juste une simple recherche & remplacer les opérations.
Salut,
Est-il possible de créer un mécanisme, dans lequel fonctionner A pourrait avoir un ensemble de crochets (fonctions qui exécuteront avant/après la fonction A)?
Idéalement, la fonction A ne serait pas au courant de la fonctionnalité d'accrochage, de sorte que je n'ai pas besoin de modifier le code source de la fonction A pour 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 pendant quelques heures, mais jusqu'à présent, pas de chance.
c'est une bonne question, altho je doute qu'il y aura une réponse positive. Vous pouvez certainement le faire mais avec une sorte de solution de contournement. Je bookmarking ceci. –