3

Audioオブジェクトのメソッドをオーバーライドしようとしていますがplay()、子オブジェクトに対してのみオーバーライドしたくありません。標準のAudioオブジェクトに適用したいと思います。

play()問題は、私も元の方法を使用したいということです。play()元のAudioオブジェクトのメソッドを呼び出して、元のAudioオブジェクトに再割り当てしながら、Audioオブジェクトのクローンを作成して変更を加えてみました。動作しません。

アイデアは誰ですか?例として、元のplayメソッドを呼び出したままalert()、メソッドにを追加するにはどうすればよいでしょうか。play()

plz。新しいオーディオを呼び出すツールによって生成された呼び出しコードがあるため、これを行う必要があります。ですから、私が行っている何百ものコード世代のために、常に置換を行わなければならないのは非常に苦痛です。

4

3 に答える 3

5
Audio.prototype.play = ( function( old ) {
   var a=1, b=2, c=3; // your 'private' variables - if needed;
   return function() {
      console.log( a+b+c );// do something   
      return old.apply( this, arguments );// return 'original' results
   }
} )( Audio.prototype.play );
于 2012-06-12T07:25:53.837 に答える
4

基本的に、これは次のように実行できます。

var playOriginal = Audio.prototype.play;
Audio.prototype.play = function(){
    playOriginal.apply(this, arguments);
}

しかし、これがすべてのブラウザで機能するかどうかはわかりません。ほとんどの場合、ネイティブJSオブジェクトの拡張はお勧めしません。

于 2012-06-12T07:16:20.540 に答える
0

元のplayメソッドを保存してから、playメソッドを、必要なときにいつでも元のメソッドを呼び出すことができる新しいメソッドに置き換えることができます。

Audio.prototype.playOriginal = Audio.prototype.play;
Audio.prototype.play = function(){
    this.playOriginal.apply(this, arguments);
}
于 2012-06-12T07:26:21.880 に答える