Здається, я запізнився :), але обговорення досить цікаве, так що ... ось це ... Припустимо, що ви хочете створити оброблювач помилок, і ви використовуєте власний клас обробника винятків, наприклад:
function errorHandler(error){
this.errorMessage = error;
}
errorHandler.prototype. displayErrors = function(){
throw new Error(this.errorMessage);
}
І ви загортаєте свій код таким чином:
try{
if(condition){
//whatever...
}else{
throw new errorHandler('Some Error Message');
}
}catch(e){
e.displayErrors();
}
Швидше за все, у вас буде обробник помилок в окремому файлі .js.
Ви помітите, що в консолі помилок firefox або chrome показаний номер рядка коду (і ім'я файлу) - це рядок (файл), який видає виняток "Помилка", а не виняток "errorHandler", який ви дійсно хочете, щоб зробити налагодження легко. Викидання власних винятків - це чудово, але для великих проектів їх розміщення може бути проблемою, особливо якщо вони мають подібні повідомлення. Отже, що ви можете зробити, це передати посилання на фактично порожній об’єкт Error вашому оброблювачу помилок, і ця посилання буде містити всю потрібну інформацію (наприклад, у firefox ви можете отримати ім'я файлу, номер рядка тощо). ; у chrome ви отримуєте щось подібне, якщо читаєте властивість 'stack' екземпляра Error). Якщо коротко розповісти, ви можете зробити щось подібне:
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();
}
Тепер ви можете отримати фактичний номер файлу та рядка, який накинув на вас спеціальне виключення.