2010-12-29 9 views
0

MDCは、これを行うために言うが、また、彼らはそれだけでFirefoxの拡張機能だと思うことを言う:投げられた価値に応じて、あなたはどのように物事をしますか?

ライブコード:http://jsfiddle.net/vQsUX/

try { 
    throw("InvalidNameException"); 
} 

catch (e if e == "InvalidNameException") { 
    document.write(e) 
} 

catch (e if e == "InvalidIdException") { 
    document.write(e) 
} 

catch (e if e == "InvalidEmailException") { 
    document.write(e) 
} 

は、どのように私はすべてのブラウザのために働くだろうと同様のことを行うことができますか?

答えて

2

だけでオブジェクトをキャッチし、単一catchブロックでそれを評価:

try { 
    // stuff 
} 
catch (exc) { 
    if (exc === "InvalidNameException") { 
    // do something 
    } 
    else if (exc === "whatever") { 
    // do something else 
    } 
} 

例外は単にオブジェクト、そしてあなたはthrowあなたが好きなものをすることができますので、あなたは常にあなた自身のより精巧な例外構造体を開発することができます。例外オブジェクトには、実行するコード、数値キー、必要なものがあります。つまり、私はJavascriptの複雑な例外メカニズムにはあまり使われていません。それはあまり起きていないようです。それにもかかわらず:

function riskyCodeHere() { 
    // scary dangerous things 
    if (badThings()) { 
    throw { 
     key: 207, 
     badnessLevel: "terrible", 
     toString: function() { 
     return "Things have gotten " + this.badnessLevel; 
     } 
    }; 
    } 
} 

// ... 

try { 
    riskyCodeHere(); 
} 
catch (b) { 
    switch (b.key) { 
    case 207: console.log(b.toString()); 
    // ... 
    } 
} 
+0

+1、素敵!スローのこの使用を見て初めて!本当に何か「悪い」が起こっている! :-) – ifaour

+0

ありがとう! 'toString:function(){}'が助けてくれることを尋ねてもいいですか? – DarkLightA

+0

ああ、それは単なる例でした。それはデバッグ目的などのために有用かもしれません。例外クラスは独自のロギングAPIなどを提供する可能性があります。ポイントは、あなたがどんなサイズや形のオブジェクトを投げることができることを示すことでした。 – Pointy

0

あなたはswitch文でそれを行うことができます。

try { 
    throw("InvalidNameException"); 
} 
catch (e) { 
    switch (e.toString()) { 
     case "InvalidNameException": 
      document.write(e); 
      break; 

     case "InvalidIdException": 
      document.write(e); 
      break; 

     case "InvalidEmailException": 
      document.write(e); 
      break; 
    } 
} 

これは、Firefoxの拡張機能のようにきれいではありませんが、それは非常に同じことを行います。

上記はオリジナルの翻訳です。例外は文字列である必要はないので、より面白い例外になる場合は、スイッチよりも面白いことができます:

try { 
    throw new MyNiftyException(...); 
} 
catch (e) { 
    if (e instanceof MyNiftyException) { 
     // Do something related to that 
    } 
    // etc 
} 
関連する問題