anular una función global en javascript

Estoy tratando de agregar mi propio manejo de errores a la función setTimeout de JavaScript. El siguiente código funciona bien en Chrome:

var oldSetTimeout = window.setTimeout;
window.setTimeout = function setTimeout(func, delay) {
    var args = Array.prototype.slice.call(arguments, 0);
    args[0] = function timeoutFunction() {
        var timeoutArgs = Array.prototype.slice.call(arguments, 0);
        try {
            func.apply(this,timeoutArgs);
        }
        catch (exception) {
            //Do Error Handling
        }
    }
    return oldSetTimeout.apply(this, args);
}

Pero en IE7 se convierte en una función recursiva. Por alguna razónoldSetTimeout se establece en la nueva función.

¿Alguna sugerencia?


Nota al margen: Sí, tengo que hacerlo de esta manera. Estoy usando un montón de bibliotecas de terceros que no se ocupan bien de setTimeout, por lo que no puedo cambiar las llamadas a setTimeout.

Respuestas a la pregunta(2)

Su respuesta a la pregunta