J'ai plusieurs méthodes que j'ai besoin d'envelopper dans de nouvelles méthodes essentiellement de la même manière. Ma première solution ne fonctionne pas, et je comprends pourquoi, mais je ne sais pas s'il existe une solution simple à ce problème ou si cela ne peut pas être fait de la façon dont je veux le faire.Comment est-ce que je peux remplacer (enrouler) des méthodes dans de nouvelles méthodes par programme?
Voici un exemple. J'ai des objets a-c qui ont une méthode onClick. J'ai besoin d'exécuter du code avant les méthodes onClick. J'ai essayé les éléments suivants:
// objects a-c
a = {onClick : function() { console.log('a'); }};
b = {onClick : function() { console.log('b'); }};
c = {onClick : function() { console.log('c'); }};
// first try
var arr = [a, b, c]
for (var i = 0; i < arr.length; i++) {
var oldOnClick = arr[i].onClick;
arr[i].onClick = function() {
// new code here
oldOnClick();
}
}
// outputs 'c'
// what i want is to maintain a reference to the original method
// so in this case, execute my new code and output 'a'
a.onClick();
Cela ne fonctionne pas parce que quand la nouvelle méthode est appelée, oldOnClick pointera à la méthode de la dernière itération et non la méthode à quand il a été affecté.
Existe-t-il une solution simple que je néglige?
ahh .. oui b/c qui va s'exécuter immédiatement. Merci, je pensais qu'il y avait une solution simple. :) –
+1 pour utilisation de fermeture – dfa