переопределение глобальной функции в javascript

Я пытаюсь добавить свою собственную обработку ошибок в функцию setTimeout JavaScript. Следующий код отлично работает в 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);
}

Но в IE7 он превращается в рекурсивную функцию. По какой-то причине oldSetTimeout устанавливается на новую функцию.

Есть предложения?



примечание: Да, мне нужно сделать это так. Я использую кучу сторонних библиотек, каждая из которых плохо справляется с setTimeout, поэтому я не могу просто изменить вызовы на setTimeout.
9
задан alumb 28 September 2010 в 17:12
поделиться