Ich schreibe eine globale Fehlerbehandlung "Modul" für eine meiner Anwendungen.Wie umgehe ich eine Funktion in Javascript?
Eines der Features, die ich haben möchte, ist in der Lage, eine Funktion einfach mit einem Try {} Catch {} Block zu wickeln, so dass alle Aufrufe an diese Funktion automatisch die Fehlerbehandlungscode, der meine ruft globale Protokollierungsmethode (Um den Code nicht überall mit try/catch-Blöcken zu verschmutzen).
Dies ist jedoch etwas jenseits meines Verständnisses der Low-Level-Funktion von Javascript, der .call und. Apply-Methoden und der "dieses" Schlüsselwort.
Ich schrieb diesen Code, basierend auf Function.wrap Methode Prototype:
Object.extend(Function.prototype, {
TryCatchWrap: function() {
var __method = this;
return function() {
try { __method.apply(this, arguments) } catch(ex) { ErrorHandler.Exception(ex); }
}
}
});
, die wie folgt verwendet:
function DoSomething(a, b, c, d) {
document.write(a + b + c)
alert(1/e);
}
var fn2 = DoSomething.TryCatchWrap();
fn2(1, 2, 3, 4);
Dieser Code funktioniert perfekt. Es druckt 6 aus und ruft dann meinen globalen Fehlerhandler auf.
Meine Frage ist ... Wird dies etwas brechen, wenn die Funktion, die ich umschließe, in einem Objekt ist, und es verwendet den Operator "this"? Ich mache mir etwas Sorgen, seit ich anrufe. Ich gebe etwas dort hin, ich fürchte, das könnte etwas kaputt machen.
OK, so neben der Präferenz der Verschmutzung oder nicht ... Ihre letzte Code-Schnipsel sieht identisch mit mir. Sollte ich daraus verstehen, dass mein Code mit Objekten und dem Schlüsselwort "this" funktioniert? Danke! –
Ja: Sie übergeben sowohl "this" als auch Originalargumente an die umschlossene Methode. Aber Sie geben das Ergebnis nicht zurück und machen das Wrapping unvollständig. Es spielt jedoch keine Rolle, wenn Sie eine Funktion umbrechen, die keinen Wert zurückgibt. –