JavaScript从函数或对象中捕获异常

时间:2013-02-07 22:55:37

标签: javascript oop error-handling

我遇到了很烦人的问题。我无法捕捉到函数内部抛出的错误。说实话 - 如果不是因为同样适用于在JavaScript对象中抛出错误,我也不会在意。

以下是示例代码:

http://jsfiddle.net/TxsHK/1/(您需要使用firebug控制台来测试此代码)

function ViewError($CONTENT){
    this.content = $CONTENT;

    return this.content;
};


try{
    $(document).ready(function() {
    //--------------
          throw ViewError('Test error');
    //--------------
    });//$(document).ready(function() {
}catch (e) {
    if (e instanceof ViewError) {
        console.info(e.message);
    }
    else{
        console.warn(e.message);
    }
}

给出错误

TypeError: e is undefined

为什么呢?函数(或对象)抛出的错误应该是完全可捕获的。这就是try - catch块的全部目的:捕获函数中的异常。至少......所以它用其他语言。

任何人都可以解释发生了什么?如何从函数/对象中捕获异常?

1 个答案:

答案 0 :(得分:2)

您的“ViewError”函数不会返回任何内容。你因此抛出undefined。 (编辑 - 你的小提琴与发布的代码不同 - 不要这样做!)

考虑到编写代码的方式,以一种我认为不正确的方式调用“ViewError”函数。我认为您需要throw new ViewError("Test error");以确保创建新对象。

还有另一个问题:你期望你能够捕获从$(document).ready()的调用中抛出的异常,但这不一定能够起作用。如果该代码运行时文档尚未就绪,那么您将不会获得例外,因为该调用会立即返回。当文档准备就绪时,您传入的函数将在稍后调用。