ดูเหมือนว่าฉันจะสายไปแล้ว :) แต่การสนทนานั้นน่าสนใจทีเดียว .. ต่อไปนี้ ... สมมติว่าคุณต้องการสร้างตัวจัดการข้อผิดพลาดและคุณกำลังใช้คลาสตัวจัดการข้อยกเว้นของคุณเองเช่น:
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" ที่คุณต้องการจริงๆเพื่อทำการดีบัก ง่าย. การทิ้งข้อยกเว้นของคุณเองเป็นเรื่องดี แต่สำหรับโครงการขนาดใหญ่ที่พบข้อยกเว้นเหล่านี้อาจเป็นปัญหาได้โดยเฉพาะอย่างยิ่งหากมีข้อความที่คล้ายกัน ดังนั้นสิ่งที่คุณทำได้คือส่งการอ้างอิงไปยังวัตถุข้อผิดพลาดจริงที่ว่างเปล่าไปยังตัวจัดการข้อผิดพลาดของคุณและการอ้างอิงนั้นจะเก็บข้อมูลทั้งหมดที่คุณต้องการ (ตัวอย่างเช่นใน firefox คุณจะได้รับชื่อไฟล์และหมายเลขบรรทัดเป็นต้น ใน chrome คุณจะได้รับสิ่งที่คล้ายกันหากคุณอ่านคุณสมบัติ 'stack' ของอินสแตนซ์ Error) เรื่องสั้นสั้นคุณสามารถทำสิ่งนี้:
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();
}
ตอนนี้คุณสามารถรับไฟล์และหมายเลขบรรทัดจริงที่ทำให้คุณได้รับข้อยกเว้นที่กำหนดเอง