ऐसा लगता है कि मैं बहुत देर से हूं :), लेकिन चर्चा बहुत दिलचस्प है .. इसलिए यहाँ पर ... यह मानते हुए कि आप एक त्रुटि हैंडलर बनाना चाहते हैं, और आप अपने स्वयं के अपवाद हैंडलर वर्ग का उपयोग कर रहे हैं:
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 फ़ाइल में त्रुटि हैंडलर होगा।
आप देखेंगे कि फ़ायरफ़ॉक्स या क्रोम की त्रुटि में कोड लाइन नंबर (और फ़ाइल का नाम) दिखाया गया कंसोल लाइन (फ़ाइल) है जो 'त्रुटि' अपवाद को फेंकता है और 'एररहैंडलर' अपवाद को नहीं जो आप वास्तव में डिबगिंग बनाने के लिए चाहते हैं। आसान। अपने स्वयं के अपवादों को फेंकना महान है लेकिन बड़ी परियोजनाओं पर उनका पता लगाना काफी मुद्दा हो सकता है, खासकर यदि उनके पास समान संदेश हैं। तो, आप क्या कर सकते हैं अपनी त्रुटि हैंडलर के लिए एक वास्तविक खाली त्रुटि ऑब्जेक्ट का संदर्भ पास करना है, और वह संदर्भ आपके द्वारा वांछित सभी जानकारी रखेगा (उदाहरण के लिए फ़ायरफ़ॉक्स में आप फ़ाइल का नाम, और लाइन नंबर आदि प्राप्त कर सकते हैं)। क्रोम में आपको कुछ ऐसा ही मिलता है यदि आप 'त्रुटि उदाहरण के स्टैक' संपत्ति को पढ़ते हैं)। लंबी कहानी छोटी, आप कुछ इस तरह कर सकते हैं:
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();
}
अब आप वास्तविक फ़ाइल और लाइन नंबर प्राप्त कर सकते हैं जिसने आपको कस्टम अपवाद फेंक दिया है।