![](/img/trans.png)
[英]JavaScript override an object method but keeping the original behavior intact
[英]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.