Я пишу глобальный модуль обработки ошибок для одного из моих приложений.
Одна из функций, которые я хочу иметь, - это возможность легко обернуть функцию блоком try{} catch{}
, чтобы все вызовы этой функции автоматически имели код обработки ошибок, который вызовет мой метод глобального ведения журнала. (Чтобы избежать загрязнения кода везде с помощью блоков try/catch).
Это, однако, немного выходит за рамки моего понимания низкоуровневого функционирования JavaScript, методов .call
и .apply
и ключевого слова this
.
Я написал этот код на основе метода Prototype 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, что-то передаю, боюсь, это может что-то сломать.