2013-08-07 3 views
2

Я хотел бы четко понять разницу между этими двумя следующими шаблонами. Фактически, вторая позволяет подражать публичному и частному методу, но есть ли другая разница?Объект litterals vs Module pattern

var myModule = { 

    myProperty: "someValue", 
    ... 
    myMethod: function() { 
    console.log("Anything"); 
    } 

}; 
myModule.myMethod(); 

и это:

var myModule = (function(){ 
     var myProperty= "someValue"; 
     ... 
     return { 
      myMethod: function(){ 
       console.log('something'); 
      } 
     } 

    })(); 
myModule.myMethod(); 

ответ

3

Второй по существу так же, как первая, за исключением того, что он также предусматривает закрытие вокруг объекта, где «частные» переменные могут быть сохранены.

В частности, если вы настроили пример наподобие второго так, чтобы он не имел локальных переменных и никаких параметров для анонимной функции, это было бы точно так же, как отсутствие анонимной функции вообще.

+0

ОК, так что нет никакого преимущества в отношении пространства имен или чего-либо еще? – Newben

+0

@Newben хорошо можно считать, что частные переменные закрытия являются преимуществом, я думаю. – Pointy

+0

Думая о некотором модульном шаблоне как классе, нельзя открыть класс и добавить какой-то метод, верно? (что было бы возможно с помощью объектов Litterals) – Newben