Vous pouvez le faire de cette façon:
arr = []
arr.push = function(data) {
alert(data); //callback
return Array.prototype.push.call(this, data);
}
Si vous êtes dans une situation sans appel, vous pouvez aussi aller pour cette solution:
arr.push = function(data) {
alert(data); //callback
//While unlikely, someone may be using psh to store something important
//So we save it.
var saved = this.psh;
this.psh = Array.prototype.push;
var ret = this.psh(data);
this.psh = saved;
return ret;
}
Edit:
Pendant que je vous dis comment faire, vous pourriez être mieux servi avec l'utilisation d'une méthode différente qui effectue le rappel puis appelle seulement pu sh sur le tableau plutôt que de passer outre. Vous pouvez vous retrouver avec des effets secondaires inattendus. Par exemple, push semble être varadic (prend un nombre variable d'arguments, comme printf), et l'utilisation de ce qui précède casserait cela.
Vous auriez besoin de faire des dégâts avec _Arguments() et _ArgumentsLength() pour surcharger correctement cette fonction. Je suggère fortement contre cette route.
Modifier une fois de plus: Ou vous pourriez utiliser des "arguments", cela fonctionnerait aussi. Toujours déconseiller de prendre cette route si.
Ma forme préférée d'enveloppement de fonction consiste à passer Array.prototype.push lorsque vous exécutez votre fonction externe et à l'accepter dans la fonction en tant que variable originale. C'est un peu plus concis – pottedmeat
@pottedmeat: mais c'est moins lisible - rappelez-vous que les programmes ne sont pas seulement écrits pour la machine, mais aussi pour d'autres programmeurs! – Christoph
@some Merci beaucoup pour une explication claire du prototype et non! – Dorjan