:あなたはコールなしの状況にいる場合
arr = []
arr.push = function(data) {
alert(data); //callback
return Array.prototype.push.call(this, data);
}
を、あなたはまた、このソリューションのために行くことができる:
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;
}
は編集:
私はあなたにそれを行う方法を教えていますが、あなたはコールバックを実行してからpuを呼び出す別のメソッドpushをオーバーライドするのではなく、配列にshを書きます。予期しない副作用が生じることがあります。例えば、pushはvaradic(printfのような可変数の引数をとります)と思われ、上記を使用するとそれが破られます。
この関数を適切にオーバーライドするには、_Arguments()と_ArgumentsLength()を混乱させる必要があります。私はこのルートに対して強く勧めます。
もう一度編集: 「引数」を使用することもできますが、それも機能します。しかし、このルートを取ることに反対してください。
私の好きな関数ラッピングの形式は、外部関数を実行するときにArray.prototype.pushを渡し、変数の元の関数として関数内で受け入れることです。それはもう少し簡潔です – pottedmeat
@pottedmeat:しかし、それは読みにくいです - 覚えて、プログラムはマシンのためだけでなく、他のプログラマーのためにも書かれています! – Christoph
@someプロトタイプをはっきりと説明してくれてありがとう! – Dorjan