Wygląda na to, że trochę się spóźniłem :), ale dyskusja jest dość interesująca, więc ... proszę bardzo ... Zakładając, że chcesz zbudować moduł obsługi błędów i używasz własnej klasy obsługi wyjątków, takiej jak:
function errorHandler(error){
this.errorMessage = error;
}
errorHandler.prototype. displayErrors = function(){
throw new Error(this.errorMessage);
}
I opakowujesz swój kod w ten sposób:
try{
if(condition){
//whatever...
}else{
throw new errorHandler('Some Error Message');
}
}catch(e){
e.displayErrors();
}
Najprawdopodobniej będziesz mieć moduł obsługi błędów w oddzielnym pliku .js.
Zauważysz, że w konsoli błędów przeglądarki Firefox lub Chrome pokazany numer linii kodu (i nazwa pliku) to linia (plik), która zgłasza wyjątek „Błąd”, a nie wyjątek „ErrorHandler”, który naprawdę chcesz, aby przeprowadzić debugowanie łatwo. Zgłaszanie własnych wyjątków jest świetne, ale w przypadku dużych projektów ich lokalizacja może być sporym problemem, zwłaszcza jeśli mają podobne komunikaty. Więc co możesz zrobić, to przekazać odniesienie do rzeczywistego pustego obiektu Error do swojego modułu obsługi błędów, a to odniesienie będzie zawierało wszystkie potrzebne informacje (na przykład w przeglądarce Firefox możesz uzyskać nazwę pliku, numer wiersza itp. ; w chrome otrzymasz coś podobnego, jeśli przeczytasz właściwość „stack” instancji Error). Krótko mówiąc, możesz zrobić coś takiego:
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();
}
Teraz możesz uzyskać rzeczywisty plik i numer wiersza, który zgłosił niestandardowy wyjątek.