Parece que llego un poco tarde :), pero la discusión es bastante interesante, así que ... aquí va ... Suponiendo que desea construir un controlador de errores, y está utilizando su propia clase de controlador de excepciones como:
function errorHandler(error){
this.errorMessage = error;
}
errorHandler.prototype. displayErrors = function(){
throw new Error(this.errorMessage);
}
Y estás envolviendo tu código así:
try{
if(condition){
//whatever...
}else{
throw new errorHandler('Some Error Message');
}
}catch(e){
e.displayErrors();
}
Lo más probable es que tenga el controlador de errores en un archivo .js separado.
Notará que en la consola de errores de Firefox o Chrome, el número de línea de código (y el nombre del archivo) que se muestra es la línea (archivo) que arroja la excepción 'Error' y no la excepción 'errorHandler' que realmente desea para realizar la depuración. fácil. Lanzar sus propias excepciones es genial, pero en proyectos grandes, localizarlas puede ser un gran problema, especialmente si tienen mensajes similares. Entonces, lo que puede hacer es pasar una referencia a un objeto Error vacío real a su controlador de errores, y esa referencia contendrá toda la información que desee (por ejemplo, en Firefox puede obtener el nombre del archivo y el número de línea, etc. ; en Chrome obtienes algo similar si lees la propiedad 'pila' de la instancia de Error). En pocas palabras, puedes hacer algo como esto:
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();
}
Ahora puede obtener el archivo real y el número de línea que generó su excepción personalizada.