Man könnte es auf diese Weise tun:
arr = []
arr.push = function(data) {
alert(data); //callback
return Array.prototype.push.call(this, data);
}
Wenn Sie in einer Situation ohne Aufruf sind, können Sie auch für diese Lösung gehen könnte:
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:
Während ich Ihnen sage, wie es geht, könnte es besser sein, wenn Sie eine andere Methode verwenden, die den Callback ausführt und dann nur pu aufruft Sh auf dem Array, anstatt zu übersteuern. Sie können mit einigen unerwarteten Nebenwirkungen enden. Zum Beispiel scheint push Varadic zu sein (nimmt eine variable Anzahl von Argumenten, wie printf), und die Verwendung der obigen würde das brechen.
Sie müssten mit _Arguments() und _ArgumentsLength() vorgehen, um diese Funktion ordnungsgemäß zu überschreiben. Ich schlage vor, diesen Weg zu gehen.
Noch einmal bearbeiten: Oder Sie könnten "Argumente" verwenden, das würde auch funktionieren. Trotzdem raten wir davon ab, diesen Weg zu gehen.
Meine bevorzugte Form des Wrappens von Funktionen besteht darin, Array.prototype.push zu übergeben, wenn Sie Ihre äußere Funktion ausführen und in der Funktion als die Variable original akzeptieren. Es ist ein wenig prägnanter – pottedmeat
@pottedmeat: aber es ist weniger lesbar - erinnern Sie sich, Programme sind nicht nur für die Maschine geschrieben, sondern auch für andere Programmierer! – Christoph
@some Vielen Dank für eine klare Erklärung des Prototyps und nicht! – Dorjan