Я играю с различными шаблонами дизайна в Javascript.Этот завод меня запутал - PullRequest
0 голосов
/ 28 июля 2010

Я играю с различными шаблонами дизайна JS, и я пытаюсь изменить некоторые образцы, которые я там видел. Я видел пример xhr factory, который имел несколько вложенных операторов try / catch, которые были вложены друг в друга.

try{
...
}catch(e){
    try{
    ...
    }catch(e){}
}

Я подумал, что смогу выполнять функцию самовозглашения. Однако кажется, что я ускользнул от того, как это должно работать. У кого-нибудь есть совет?

Пример:
http://jsfiddle.net/jiggliemon/a7xWq/2/


[Update]
http://jsfiddle.net/jiggliemon/b5LaZ/embedded/
Дело закрыто.

Ответы [ 2 ]

0 голосов
/ 30 июля 2010
var XHR = (function(){
    var ins = [
        function(){return new XMLHttpRequest();},
        function(){return new ActiveXObject('Msxml2.XMLHTTP');},
        function(){return new ActiveXObject('Microsoft.XMLHTTP');}
    ],i,tmp;

    return (function tryIns(i){
        i = i || 0;
        while(i < ins.length){
            try{tmp = ins[i]();}
            catch(e){i++; tryIns(i);}
            finally{return ins[i];}
        }
        throw new Error("Your browser doesn\'t support Ajax requests");
    })();
})();
0 голосов
/ 28 июля 2010

Изменен цикл попытки на:

for(var i = 0, l = instances.length; i < l; i ++) {
    try{
        var obj = instances[i].getInstance();
        return instances[i];
    }catch(e){ }
}

Полный код

...