Я пишу глобальный «модуль» обработки ошибок для одного из моих приложений.
Одна из функций, которые я хочу иметь, - это возможность легко обернуть функцию блоком try{} catch{}
, чтобы все вызовы этой функции автоматически имели код обработки ошибок, который вызовет мой метод глобальной регистрации. (Чтобы не загрязнять код везде блоками try / catch).
Это, однако, немного выходит за рамки моего понимания низкоуровневого функционирования JavaScript, методов .call
и .apply
и ключевого слова this
.
Я написал этот код на основе метода Function.wrap
Прототипа:
Object.extend(Function.prototype, {
TryCatchWrap: function() {
var __method = this;
return function() {
try { __method.apply(this, arguments) } catch(ex) { ErrorHandler.Exception(ex); }
}
}
});
Что используется так:
function DoSomething(a, b, c, d) {
document.write(a + b + c)
alert(1/e);
}
var fn2 = DoSomething.TryCatchWrap();
fn2(1, 2, 3, 4);
Этот код работает отлично. Он печатает 6, а затем вызывает мой глобальный обработчик ошибок.
Мой вопрос: это что-то сломает, когда функция, которую я обертываю, находится внутри объекта, и она использует оператор "this"? Я немного волнуюсь, так как я звоню .apply, передавая что-то там, я боюсь, что это может что-то сломать.