0

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

4

1 回答 1

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();
于 2013-09-13T14:36:05.900 回答