私は自分のアプリケーションの1つにグローバルエラー処理「モジュール」を書いています。
私が望んでいる機能の1つは、関数をブロックで簡単にラップできるようにすることですtry{} catch{}
。これにより、その関数へのすべての呼び出しに、グローバルロギングメソッドを呼び出すエラー処理コードが自動的に含まれるようになります。(try / catchブロックでどこでもコードを汚染しないようにするため)。
.call
ただし、これは、JavaScript、 and.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と呼んでいるので少し心配ですが、そこに何かを渡すと、何かが壊れるのではないかと心配しています。