Override function (e.g. "alert") and call the original function?

javascript, overriding

Solution

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 = ...`.

Problem

I would like to override a Javascript built-in function with a new version that calls the original (similarly to overriding a method on a class with a version that calls `super` in many languages). How can I do this? For example... ``` window.alert = function(str) { //do something additional if(console) console.log(str); //super.alert(str) // How do I do this bit? } ```

Original source

Related problems