I'm trying to override the play()
method of the Audio object, but I don't want to do so just for a child object. I want to apply it to the standard Audio object.
The problem is I also want to use the original play()
method. I've tried cloning the Audio object, making the changes, while calling the original Audio object's play()
method and re-assigning back to the original Audio object. It doesn't work.
Ideas anyone? As an example, how could you add an alert()
in the play()
method while still calling the original play method?
plz. I need to do this because I have calling code generated by a tool that is calling new Audio. So it will be a super pain to constantly have to do a replace-all on this for the hundreds of code generations I'm doing.
I'm trying to override the play()
method of the Audio object, but I don't want to do so just for a child object. I want to apply it to the standard Audio object.
The problem is I also want to use the original play()
method. I've tried cloning the Audio object, making the changes, while calling the original Audio object's play()
method and re-assigning back to the original Audio object. It doesn't work.
Ideas anyone? As an example, how could you add an alert()
in the play()
method while still calling the original play method?
plz. I need to do this because I have calling code generated by a tool that is calling new Audio. So it will be a super pain to constantly have to do a replace-all on this for the hundreds of code generations I'm doing.
Share Improve this question edited Jun 12, 2012 at 9:12 Talha 19.3k8 gold badges52 silver badges66 bronze badges asked Jun 12, 2012 at 7:10 faceyspacey.faceyspacey. 2,6302 gold badges22 silver badges31 bronze badges 1- 1 Can we see the code you tried? :-) – Florian Margaine Commented Jun 12, 2012 at 7:15
3 Answers
Reset to default 5Audio.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 );
Basically this could be done like this:
var playOriginal = Audio.prototype.play;
Audio.prototype.play = function(){
playOriginal.apply(this, arguments);
}
But I'm not sure this will work for all browsers. Extending of native JS object is not remended in most cases.
You can save the original play method, then replace the play method with a new method that can call the original method whenever it wants to.
Audio.prototype.playOriginal = Audio.prototype.play;
Audio.prototype.play = function(){
this.playOriginal.apply(this, arguments);
}