少し遅れているようです:)ですが、議論はとても興味深いです。
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'例外をスローする行(ファイル)であることがわかります簡単です。独自の例外をスローすることは素晴らしいことですが、特に類似したメッセージがある場合、大規模なプロジェクトでそれらを見つけることは非常に問題になる可能性があります。したがって、あなたができることは、実際の空のErrorオブジェクトへの参照をエラーハンドラーに渡すことであり、その参照は必要なすべての情報を保持します(たとえば、Firefoxでは、ファイル名や行番号などを取得できます)。 ;クロムでは、Errorインスタンスの 'stack'プロパティを読み取ると同様の結果になります。要するに、次のようなことができます。
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();
}
これで、カスタム例外をスローした実際のファイルと行番号を取得できます。