繁体   English   中英

如何覆盖Javascript中的方法并将其应用于原始对象,而不是孩子?

[英]How can I override a method in Javascript and apply it to the original object, not a child?

我试图覆盖Audio对象的play()方法,但我不想只为子对象这样做。 我想将它应用于标准的Audio对象。

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

想法有人吗? 例如,如何在仍然调用原始播放方法的同时在play()方法中添加alert()

PLZ。 我需要这样做,因为我调用了一个调用新音频的工具生成的代码。 因此,对于我正在做的数百代代码而言,不断地必须对此进行替换将是一种超级痛苦。

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 );

基本上这可以这样做:

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

但我不确定这适用于所有浏览器。 在大多数情况下,不建议扩展本机JS对象。

您可以保存原始播放方法,然后使用可以随时调用原始方法的新方法替换播放方法。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM