0

我遇到了相当烦人的问题。我无法捕获从函数中抛出的错误。老实说 - 如果不是同样适用于从 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 块的全部目的:从函数中捕获异常。至少……在其他语言中也是如此。

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

4

1 回答 1

2

您的“ViewError”函数不返回任何内容。因此,您正在投掷undefined. (编辑-您的小提琴与发布的代码不同-不要那样做!)

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

还有另一个问题:您希望能够捕获从调用 to 引发的异常$(document).ready(),但这并不一定会奏效。如果该代码运行时文档还没有准备好,那么您将不会收到任何异常,因为调用会立即返回。当文档准备好时,您传入的函数将在稍后调用。

于 2013-02-07T22:58:07.957 回答