是否有可能影响 JS 编译器抛出的错误?特别是,我想创建自己的错误类型NullPointerException
,然后代理内置错误(例如Error
and 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
部分,因此我希望相应地抛出错误。