Es scheint, dass ich etwas spät dran bin :), aber die Diskussion ist ziemlich interessant, also ... hier ist es ... Angenommen, Sie möchten einen Fehlerhandler erstellen und verwenden Ihre eigene Ausnahmebehandlungsklasse wie:
function errorHandler(error){
this.errorMessage = error;
}
errorHandler.prototype. displayErrors = function(){
throw new Error(this.errorMessage);
}
Und Sie verpacken Ihren Code folgendermaßen:
try{
if(condition){
//whatever...
}else{
throw new errorHandler('Some Error Message');
}
}catch(e){
e.displayErrors();
}
Höchstwahrscheinlich haben Sie den Fehlerbehandler in einer separaten .js-Datei.
Sie werden feststellen, dass in der Firefox- oder Chrome-Fehlerkonsole die angezeigte Codezeilennummer (und der Dateiname) die Zeile (Datei) ist, die die Ausnahme 'Error' auslöst, und nicht die Ausnahme 'errorHandler', die Sie wirklich für das Debuggen benötigen einfach. Das Auslösen eigener Ausnahmen ist großartig, aber bei großen Projekten kann das Auffinden dieser Ausnahmen ein ziemliches Problem sein, insbesondere wenn sie ähnliche Meldungen enthalten. Sie können also einen Verweis auf ein tatsächlich leeres Fehlerobjekt an Ihren Fehlerbehandler übergeben, und dieser Verweis enthält alle gewünschten Informationen (z. B. können Sie in Firefox den Dateinamen und die Zeilennummer usw. abrufen. ; in Chrome erhalten Sie etwas Ähnliches, wenn Sie die Eigenschaft 'stack' der Fehlerinstanz lesen. Kurz gesagt, Sie können so etwas tun:
function errorHandler(error, errorInstance){
this.errorMessage = error;
this. errorInstance = errorInstance;
}
errorHandler.prototype. displayErrors = function(){
//add the empty error trace to your message
this.errorMessage += ' stack trace: '+ this. errorInstance.stack;
throw new Error(this.errorMessage);
}
try{
if(condition){
//whatever...
}else{
throw new errorHandler('Some Error Message', new Error());
}
}catch(e){
e.displayErrors();
}
Jetzt können Sie die tatsächliche Datei- und Zeilennummer abrufen, die Ihre benutzerdefinierte Ausnahme ausgelöst hat.