Il semble que je suis un peu en retard :), mais la discussion est assez intéressante alors ... la voici ... En supposant que vous vouliez créer un gestionnaire d'erreurs et que vous utilisiez votre propre classe de gestionnaire d'exceptions comme:
function errorHandler(error){
this.errorMessage = error;
}
errorHandler.prototype. displayErrors = function(){
throw new Error(this.errorMessage);
}
Et vous encapsulez votre code comme ceci:
try{
if(condition){
//whatever...
}else{
throw new errorHandler('Some Error Message');
}
}catch(e){
e.displayErrors();
}
Vous aurez très probablement le gestionnaire d'erreurs dans un fichier .js séparé.
Vous remarquerez que dans la console d'erreur de Firefox ou Chrome, le numéro de ligne de code (et le nom de fichier) affiché est la ligne (fichier) qui lève l'exception 'Error' et non l'exception 'errorHandler' que vous voulez vraiment pour effectuer le débogage facile. Lancer vos propres exceptions est génial, mais sur les grands projets, les localiser peut être un problème, surtout s'ils ont des messages similaires. Donc, ce que vous pouvez faire est de passer une référence à un objet Error vide réel à votre gestionnaire d'erreurs, et cette référence contiendra toutes les informations que vous voulez (par exemple, dans Firefox, vous pouvez obtenir le nom du fichier, le numéro de ligne, etc. ; dans Chrome, vous obtenez quelque chose de similaire si vous lisez la propriété 'stack' de l'instance Error). Pour faire court, vous pouvez faire quelque chose comme ceci:
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();
}
Vous pouvez maintenant obtenir le fichier réel et le numéro de ligne qui vous ont généré une exception personnalisée.