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

JavaScript Catching exception from within function or object

本文关键字:捕获异常 对象 函数 JavaScript      更新时间:2023-09-26

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

有人能解释发生了什么吗?如何从函数/对象中捕获异常?

您的"ViewError"函数不会返回任何内容。因此,您正在抛出undefined。(edit—您的小提琴与发布的代码不同-不要这样做!)

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

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