Override function (e.g. "alert") and call the original function?
There is no "super". Anyway, create a closure to "keep" around the original function-object.
Note the "self invoking function" that returns a new function-object (that is assigned to the window.alert
property). The new function-object returned creates a closure around the variable original
which evaluates to the original value of window.alert
that was passed in to the "self invoking function".
window.alert = (function (original) {
return function (str) {
//do something additional
if(console) {
console.log(str)
}
original(str)
}
})(window.alert)
However, I believe some browsers may prevent alert
and other built-ins from being modified...
Happy coding.
Store a reference to the original function in a variable:
(function() {
var _alert = window.alert; // <-- Reference
window.alert = function(str) {
// do something additional
if(console) console.log(str);
//return _alert.apply(this, arguments); // <-- The universal method
_alert(str); // Suits for this case
};
})();
The universal way is <original_func_reference>.apply(this, arguments)
- To preserve context and pass all arguments. Usually, the return value of the original method should also be returned.
However, it's known that alert
is a void function, takes only one argument, and does not use the this
object. So, _alert(str)
is sufficient in this case.
Note: IE <= 8 throws an error if you try to overwrite alert
, so make sure that you're using window.alert = ...
instead of alert = ...
.