【发布时间】:2010-09-24 12:07:27
【问题描述】:
我正在为我的一个应用程序编写一个全局错误处理“模块”。
我想要的功能之一是能够轻松地用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,在那里传递了一些东西,我担心这可能会破坏一些东西。
【问题讨论】:
标签: javascript function try-catch apply wrapper