是否可以影响从JS编译器抛出的错误?特别是,我想创建自己的错误类型NullPointerException
,然后代理内置错误(例如Error
和TypeError
),以便可能返回我的自定义异常。
考虑以下简单尝试(是的,它们是全局变量 - 但应该是它们):
NullPointerException = function (msg) {
this.message = msg;
};
NullPointerException.prototype.toString = function () {
return "NullPointerException: " + this.message;
};
var ProxyTypeError = TypeError;
TypeError = function (msg) {
if (msg.indexOf('null') === -1) {
return new ProxyTypeError(msg);
}
return new NullPointerException(msg);
};
这适用于
等情况throw new TypeError('normal error'); // 'TypeError: normal error'
throw new TypeError('null'); // 'NullPointerException: null'
但是,它不适用于我实际希望它工作的场景:
var obj = null;
console.log( obj.someMethod() ); // 'Uncaught TypeError: ...'
我知道浏览器都使用不同的消息和不同的错误,并且甚至想要做任何这些都是粗略的。但是,如果有任何实际的解决方案,我仍然会感兴趣吗?最后,用例类似于
try {
// ... code ...
} catch( e ) {
if( e instanceof NullPointerException ) {
// handle NPE separately
}
// do something else
}
其中我无法访问catch
部分,因此我希望相应地抛出错误。
答案 0 :(得分:0)
是否可以影响从JS解释器抛出的错误?
没有。但是,如果您想抛出自己的错误,可以对自己代码中发生的所有异常执行此操作:
try {
/* some code, possibly foreign */
var obj = null;
obj.someMethod()
} catch (e) {
throw new CustomTypeError(e.msg);
}
但是检查你的类型会好得多:
var obj = null;
if (obj == null)
throw new NullPointerException();
else
obj.someMethod();