Sembra che io sia un po 'in ritardo :), ma la discussione è piuttosto interessante quindi ... eccolo ... Supponendo che tu voglia costruire un gestore di errori e tu stia usando la tua classe di gestore di eccezioni come:
function errorHandler(error){
this.errorMessage = error;
}
errorHandler.prototype. displayErrors = function(){
throw new Error(this.errorMessage);
}
E stai avvolgendo il tuo codice in questo modo:
try{
if(condition){
//whatever...
}else{
throw new errorHandler('Some Error Message');
}
}catch(e){
e.displayErrors();
}
Molto probabilmente avrai il gestore degli errori in un file .js separato.
Noterai che nella console degli errori di Firefox o Chrome il numero di riga di codice (e il nome del file) mostrato è la riga (file) che genera l'eccezione "Error" e non l'eccezione "errorHandler" che desideri veramente per eseguire il debug facile. Lanciare le proprie eccezioni è fantastico, ma in grandi progetti individuarle può essere un bel problema, soprattutto se hanno messaggi simili. Quindi, quello che puoi fare è passare un riferimento a un oggetto Error vuoto effettivo al tuo gestore di errori, e quel riferimento conterrà tutte le informazioni che desideri (ad esempio in firefox puoi ottenere il nome del file, il numero di riga ecc. ; in chrome ottieni qualcosa di simile se leggi la proprietà 'stack' dell'istanza Error). Per farla breve, puoi fare qualcosa del genere:
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();
}
Ora puoi ottenere il file effettivo e il numero di riga che ha generato l'eccezione personalizzata.