JavaScript合同和断言

时间:2012-06-06 13:25:14

标签: javascript assert design-by-contract

这让我有点困扰。我在断言失败时抛出异常,但这只有在我能够实际捕获异常(在这种情况下我是alert用户)时才有用。如果我无法捕捉到异常,那么

  1. 我依靠浏览器通知用户存在内部错误(浏览器可能无效,因此用户从未发现存在问题),
  2. 我没有看到,所以无法清理。
  3. 那么,实际上有一种很好的方法来处理JavaScript中的断言错误吗?有没有办法捕捉未捕获的异常?请注意,我对单元测试,用户错误等不感兴趣 - 我只关心合同编程,用户和开发人员都需要知道存在错误。

1 个答案:

答案 0 :(得分:2)

对于断言,有console.assert()。但这只会记录消息并继续。

使用HTML5,还可以使用window.onerror处理程序捕获未处理的异常。有一个excellent article on dev.opera如何用于向用户显示奇特的错误消息,甚至可以将异常记录到服务器。

如果你不能使用它,你就会在所有事情周围包装try-catch-clauses(特别是“执行入口点”,比如事件处理程序,超时和co。)。或者你可以在抛出之前处理错误:

function SmartError(message) {
    Error.call(this, message);
    $('<div class="error">Some problem occured, the app will stop working</div>')
        .appendTo("body");
    $.post("/log/clientside/js.php", this);
    ...
}

if (something.does(! "work"))
    throw new SmartError("mysterious problem");