Try.theseメソッド
【抜粋】 var Try = { these: function() { var returnValue; for (var i = 0; i < arguments.length; i++) { var lambda = arguments[i]; try { returnValue = lambda(); break; } catch (e) {} } return returnValue; } }
Tryオブジェクトにtheseメソッドが一つだけです。複数の関数を引数として指定すると、成功するまで実行を繰り返し、成功した関数の戻り値を返却します。
returnValue = lambda();でエラーが発生すると、breakせずにcatch節へ飛び、実行が繰り返されることになります。
例として、後述Ajax.getTransportをあげます。
【参考】 getTransport: function() { return Try.these( function() {return new ActiveXObject('Msxml2.XMLHTTP')}, function() {return new ActiveXObject('Microsoft.XMLHTTP')}, function() {return new XMLHttpRequest()} ) || false; },
3つある関数のうち、一つめはIE6以降のみ成功し、他はエラーになります。この場合二つめが実行されますが、これはIE4〜5.5までが成功し、他がエラーとなります。最後に三つめが実行されます。一部のブラウザではこれもエラーになり、返却値はundefinedです。この場合はfalseが返却されるようになっています。