Кажется, я немного опоздал :), но обсуждение довольно интересное, так что ... вот так ... Предполагается, что вы хотите создать обработчик ошибок и используете свой собственный класс обработчика исключений, например:
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 показанный номер строки кода (и имя файла) - это строка (файл), которая вызывает исключение «Ошибка», а не исключение «ОшибкаHandler», которое вы действительно хотите использовать сделать отладку легкой. Создание собственных исключений - это замечательно, но в больших проектах их обнаружение может стать проблемой, особенно если у них есть похожие сообщения. Итак, что вы можете сделать, это передать ссылку на фактический пустой объект 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();
}
Теперь вы можете получить фактический файл и номер строки, которая вызвала пользовательское исключение.