代理内置错误?

时间:2013-09-13 14:03:57

标签: javascript ecmascript-5

是否可以影响从JS编译器抛出的错误?特别是,我想创建自己的错误类型NullPointerException,然后代理内置错误(例如ErrorTypeError),以便可能返回我的自定义异常。

考虑以下简单尝试(是的,它们是全局变量 - 但应该是它们):

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部分,因此我希望相应地抛出错误。

1 个答案:

答案 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();