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");新しいオブジェクトが作成されたことを確認するために必要だと思います。

別の問題があります: への呼び出しからスローされた例外をキャッチできると期待していますが$(document).ready()、必ずしもうまくいくとは限りません。コードの実行時にドキュメントの準備がまだできていない場合、呼び出しはすぐに戻るため、例外は発生しません。渡した関数は、後でドキュメントの準備ができたときに呼び出されます。

于 2013-02-07T22:58:07.957 に答える