2013-05-05 8 views
5

मेरे कस्टम त्रुटि वर्ग:कस्टम Javascript Error.toString()

function MyError(message) { 
    this.message = message || ""; 
} 

MyError.prototype   = new Error(); 
MyError.prototype.name  = "MyError"; 
MyError.prototype.toString = function() { 
    return "[" + this.name + "] " + this.message; 
}; 

अगर मैं throw new MyError("test") चलाने तो एफएफ/आईई सांत्वना की उम्मीद [MyError] test के बजाय एक डिफ़ॉल्ट संदेश को दर्शाता है।

मैं अपने toString() विधि का उपयोग करने के लिए जेएस इंजन कैसे प्राप्त करूं?

function MyError(message) { 
    this.message = message || ""; 
} 

MyError.prototype = Object.create(Error.prototype); // see the note 
MyError.prototype.name = "MyError"; 
MyError.prototype.toString = function() { 
    return "[" + this.name + "] " + this.message; 
} 

console.log(new MyError("hello").toString()); // "[MyError] hello" 

ध्यान दें कि पुराने ब्राउज़र Object.create (ES5 वाक्य रचना) का समर्थन नहीं कर सकते हैं, तो आप this शिम उपयोग करने के लिए कर सकते हैं:

+0

यह 'MyError.prototype = Error.prototype' नहीं होना चाहिए? – fardjad

+1

एक समाधान त्रुटि से प्राप्त नहीं होगा। –

+1

@ फर्डजाद नोप [यहां देखें] (http://stackoverflow.com/a/871646/1711500) –

उत्तर

0

मुझे गलत हो सकता है, लेकिन मुझे लगता है कि इस मामले में कंसोल आउटपुट जेएस इंजन द्वारा नियंत्रित होता है, और इसलिए आप इसे प्रारूपित नहीं कर सकते जैसा मैंने ऊपर किया है।

+0

हां, यह शायद सच है। लेकिन आप वैसे भी क्यों बदलना चाहते हैं? – Bergi

+0

कुछ अन्य उपकरण जो आउटपुट को पार्स कर रहा है। मुझे इसे बदलना होगा। –

+0

क्या आप हमें वह टूल दिखा सकते हैं? मैं सकारात्मक हूं कि एक बेहतर समाधान है। – Bergi

3

यह मैं Error (परीक्षण किया है और एफएफ v20 पर काम कर) कैसे वारिस होता है इसे काम करने लायक बनाओ।

+0

दुर्भाग्य से यह ऐसा करने पर अपेक्षित व्यवहार प्रदर्शित नहीं करता है: 'नया MyError ("हैलो") फेंक दें;' यह अभी भी एक डिफ़ॉल्ट संदेश दिखाता है। ऊपर सूचीबद्ध तरीका कार्यात्मक रूप से इसके बराबर है, लेकिन थोड़ा सुरक्षित है। मुझे लगता है कि ब्राउज़र के जेएस इंजन के साथ ऐसा करना है, और इसलिए मैं इसे बदल नहीं सकता। –

+0

असल में 'नया MyError (' हैलो ') फेंक दें ** ** एफएफ ** में मेरे लिए ठीक काम करता है। – fardjad

+0

यह काम करता है, लेकिन यह आपकी कस्टम स्ट्रिंग नहीं दिखाता है। –