处理JavaScript中的特定错误(认为例外)
你将如何实现不同types的错误,所以你可以抓住特定的,让其他人泡沫..?
一种方法是修改Error
对象的原型:
Error.prototype.sender = ""; function throwSpecificError() { var e = new Error(); e.sender = "specific"; throw e; }
捕获特定的错误:
try { throwSpecificError(); } catch (e) { if (e.sender !== "specific") throw e; // handle specific error }
你们有没有其他的select?
要创build自定义exception,可以从Error对象inheritance:
function SpecificError () { } SpecificError.prototype = new Error(); // ... try { throw new SpecificError; } catch (e) { if (e instanceof SpecificError) { // specific error } else { throw e; // let others bubble up } }
一个简单的方法,没有从错误inheritance,可能会抛出一个简单的对象具有名称和消息属性:
function throwSpecificError() { throw { name: 'SpecificError', message: 'SpecificError occurred!' }; } // ... try { throwSpecificError(); } catch (e) { if (e.name == 'SpecificError') { // specific error } else { throw e; // let others bubble up } }
正如下面的评论所指出的那样,这是Mozilla特有的,但是你可以使用'条件接收'模块。 例如:
try { ... throwSpecificError(); ... } catch (e if e.sender === "specific") { specificHandler(e); } catch (e if e.sender === "unspecific") { unspecificHandler(e); } catch (e) { // don't know what to do throw e; }
这给了Java更类似于types化的exception处理,至less在语法上。
try-catch-finally.js
例
_try(function () { throw 'My error'; }) .catch(Error, function (e) { console.log('Caught Error: ' + e); }) .catch(String, function (e) { console.log('Caught String: ' + e); }) .catch(function (e) { console.log('Caught other: ' + e); }) .finally(function () { console.log('Error was caught explicitly'); });