Вот альтернативный ответ, чем window.onerror
решение. Это не то, что я использовал в производстве, но это то, что мне просто нравится из-за гибкости (т.е. вы можете использовать это для отладки таких вещей, как определение времени, сколько времени занял метод или что-то в этом роде).
Хотя вы, вероятно, могли бы передать в него window
(не цитируйте меня об этом и не думайте, что это хорошая идея), это работает, если у вас есть все ваши методы в объекте :
(function(obj) {
for (var name in obj) {
if (typeof(obj[name]) == 'function') {
currentMethod = obj[name];
obj[name] = function() {
try {
currentMethod();
}
catch (e) {
alert('Exception Handler: ' + e);
}
};
}
}
}(myObject));
Вот как это работает: http://jsfiddle.net/jonathon/kpYnW/
По сути, он просматривает каждое свойство в вашем объекте, находит те, которые являются функциями, и упаковывает их в try / catch (или все, что вы хотите).
Является ли он эффективным, это другой вопрос - я только что нашел его очень полезным методом для отладки. К сожалению, я не могу вспомнить исходное место, где я его читал, но, если кто-нибудь знает, пожалуйста, добавьте в качестве комментария.