Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <html><head><title> JavaScript self-made Error object comparison </title></head>
- <body><script type="text/javascript">
- /*** Error classes ****************************************/
- /* Implementation 1: The very simple one */
- function MyError1(message) {
- this.name = 'MyError1';
- this.message = message;
- this.stack = (new Error()).stack;
- }
- MyError1.prototype = new Error; // <-- remove this line if you do not
- // want MyError1 to inherit Error
- /* Implementation 2:
- http://stackoverflow.com/questions/1382107/whats-a-good-way-to-extend-error-in-javascript/3535758#3535758 */
- function MyError2(message, fileName, lineNumber) {
- var err = new Error();
- if (err.stack) {
- // remove one stack level:
- if (typeof(Components) != 'undefined') {
- // Mozilla:
- this.stack = err.stack.substring(err.stack.indexOf('\n')+1);
- }
- else if (typeof(chrome) != 'undefined' || typeof(process) != 'undefined') {
- // Google Chrome/Node.js:
- this.stack = err.stack.replace(/\n[^\n]*/,'');
- }
- else {
- this.stack = err.stack;
- }
- }
- this.message = message === undefined ? err.message : message;
- this.fileName = fileName === undefined ? err.fileName : fileName;
- this.lineNumber = lineNumber === undefined ? err.lineNumber : lineNumber;
- }
- /* Implementation 3:
- http://blog.getify.com/2010/02/howto-custom-error-types-in-javascript/ */
- var MyError3 = (function() {
- function F(){}
- function CustomError() {
- var _this = (this===window) ? new F() : this,
- tmp = Error.prototype.constructor.apply(_this,arguments)
- ;
- for (var i in tmp) {
- if (tmp.hasOwnProperty(i)) _this[i] = tmp[i];
- }
- return _this;
- }
- function SubClass(){}
- SubClass.prototype = Error.prototype;
- F.prototype = CustomError.prototype = new SubClass();
- CustomError.prototype.constructor = CustomError;
- return CustomError;
- })();
- /*** Run a set of tests ***********************************/
- function test(name, errorObject) {
- document.write('<h3>'+ name +'</h3>');
- document.write('<p>instance of Error: ')
- document.write(errorObject instanceof Error);
- document.write('<br>instance of '+ name +': ');
- document.write(eval('errorObject instanceof '+ name));
- document.write('</p>')
- try {
- for (var key in errorObject) {
- document.write('<dl><dt>'+ key +'</dt><dd>');
- if (key == 'lineNumber') {
- document.write(errorObject.lineNumber);
- document.write(errorObject.lineNumber === test.lineNum
- ? ' === ' : ' !== ');
- document.write(test.lineNum);
- } else {
- document.write(errorObject[key]);
- }
- document.write('</dd></dl>');
- }
- } catch (e) {
- document.write('</dd></dl>');
- document.write('<p>failed: '+ e +'</p>');
- }
- ++test.lineNum;
- }
- test.lineNum = (new Error()).lineNumber + 1;
- try { throw new Error('message') } catch (e) { test('Error', e) }
- try { throw new MyError1('message1') } catch (e) { test('MyError1', e) }
- try { throw new MyError2('message2') } catch (e) { test('MyError2', e) }
- try { throw new MyError3('message3') } catch (e) { test('MyError3', e) }
- </script></body></html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement