3

我正在尝试覆盖play()Audio 对象的方法,但我不想只为子对象这样做。我想将它应用到标准音频对象。

问题是我也想用原来的play()方法。我尝试克隆音频对象,进行更改,同时调用原始音频对象的play()方法并重新分配回原始音频对象。它不起作用。

任何人的想法?例如,如何在仍然调用原始 play 方法的同时alert()在方法中添加一个?play()

请。我需要这样做,因为我有一个调用新音频的工具生成的调用代码。因此,对于我正在做的数百个代码生成,不断地对此进行全部替换将是一件非常痛苦的事情。

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 回答