cachaito
2/12/2014 - 8:44 PM

Namespaces in module pattern

Tworzenie przestrzeni nazw dla modułów w aplikacji (JS Patterns)

/* 01. deklaracja */

//niebezpiecznie
var myApp = {};

//lepiej
if(typeof myApp === 'undefined') {
  myApp = {};
}

//super
myApp = myApp || {};

/* 02. tworzenie właściwości aplikacji */

//źle - tym sposobem łatwo nadpisać właściwości
myApp.modules.addSomething;

//super - tworzy właściwości tylko w przypadku gdy zadeklarowana aplikacja takowej nie posiada
myApp.nameSpace = function(str) {
   var parts = str.split('.'),
       appName = 'myApp',
       parent = myApp,
       i;
    
    if(parts[0] === appName) {
      parts = parts.splice(1);
    }
    
    for(i = 0; i < parts.length; i++) {
      if(typeof parent[parts[i]] === 'undefined') {
        parent[parts[i]] = {};
      }

      parent = parent[parts[i]];
    }
  
  return parent;
}

myApp.nameSpace('myApp.modules.addSomething');