Закрытия в автоисполняющихся функциях vs объекты

Допустим, у меня есть следующее:

var foo = (function(){
    var bar = 0;
    return {
       getBar: function(){
           return bar;
       },
       addOne: function(){
           bar++;
       },
       addRandom: function(rand){
           bar += rand;
       }
    }
})();

И у меня есть следующее:

var foo2 = function(){
    var bar = 0;
    this.getBar = function(){
           return bar;
       };
    this.addOne = function(){
           bar++;
       };
    this.addRandom = function(rand){
           bar += rand;
       }
};

Единственная разница в выполнении функций - это new?

alert(foo.getBar()); //0
foo.addOne();
foo.addRandom(32);
alert(foo.getBar()); //33

var foo2_obj = new foo2;
alert(foo2_obj.getBar());//0
foo2_obj.addOne();
foo2_obj.addRandom(32);
alert(foo2_obj.getBar());//33

Они обе выводят одно и то же.

Так в чем же разница в долгосрочной перспективе?

Что может сделать одна, чего не может другая?

Fiddle Demo of the above: http://jsfiddle.net/maniator/YtBpe/

15
задан Neal 22 November 2011 в 18:21
поделиться