Görünüşe göre biraz geç kaldım :), ama tartışma oldukça ilginç, bu yüzden .. işte başlıyor ... Bir hata işleyici oluşturmak istediğinizi ve kendi istisna giderici sınıfınızı aşağıdaki gibi kullandığınızı varsayarsak:
function errorHandler(error){
this.errorMessage = error;
}
errorHandler.prototype. displayErrors = function(){
throw new Error(this.errorMessage);
}
Ve kodunuzu şu şekilde sarmalıyorsunuz:
try{
if(condition){
//whatever...
}else{
throw new errorHandler('Some Error Message');
}
}catch(e){
e.displayErrors();
}
Hata işleyiciyi büyük olasılıkla ayrı bir .js dosyasında bulacaksınız.
Firefox veya chrome'un hata konsolunda gösterilen kod satırı numarasının (ve dosya adının), hata ayıklama yapmak için gerçekten istediğiniz 'errorHandler' istisnasını değil, 'Error' istisnasını atan satır (dosya) olduğunu fark edeceksiniz. kolay. Kendi istisnalarınızı atmak harikadır, ancak büyük projelerde bunları bulmak, özellikle de benzer mesajlar varsa, oldukça sorun olabilir. Yani, yapabileceğiniz şey, hata işleyicinize gerçek bir boş Error nesnesine bir referans iletmektir ve bu referans istediğiniz tüm bilgileri tutacaktır (örneğin firefox'ta dosya adını ve satır numarasını vb. Alabilirsiniz. ; chrome'da, Error örneğinin 'stack' özelliğini okursanız benzer bir şey elde edersiniz). Uzun lafın kısası, şöyle bir şey yapabilirsiniz:
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();
}
Artık size özel istisna atan gerçek dosya ve satır numarasını alabilirsiniz.