Revision: 43134
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at January 5, 2012 00:40 by coprolit
                            
                            Updated Code
/*
 The idea here is that you have private methods
 which you want to expose as public methods.
*/
var SomeModule = (function(param){
	// Private stuff
	// 'this' keyword refers to the current instance. Must use 'new' when creating instances of the module, else 'this' will refer to global scope.
	this.initval = param;
	this.name = 'John Smith';
	this.age = 40;
	function setPerson(param) {
		this.name = param;
	}
		
	function getPerson() {
		return this.name; // create closure (inner function) to bind the var (= keep it around)
	}
	// Public stuff / reveal and bind
	return {
		set: this.setPerson,
		get: this.getPerson,
		age: this.age
	};
});
// creating instances
var newModule = new SomeModule(newparam);
newModule.set("Some Name");
var name = newModule.age;
var name = newModule.get;
                                
                            Revision: 43133
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at March 17, 2011 20:02 by coprolit
                            
                            Updated Code
/*
 The idea here is that you have private methods
 which you want to expose as public methods.
*/
var myRevealingModule = function(){
  //private attributes
  var privateVar = 5;
  
  //private methods
  function setVar(arg)
  {
    privateVar = arg;
  };
  function getVar()
  {
    return privateVar;
  };
  
  //revealing public API aka public methods
  return
  {
    set: setVar,
    get: getVar
  }
}();
// Sample usage:
myRevealingModule.set(7);
myRevealingModule.get();
                                
                            Revision: 43132
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at March 17, 2011 20:01 by coprolit
                            
                            Updated Code
/*
 The idea here is that you have private methods
 which you want to expose as public methods.
*/
var myRevealingModule = function(){
  //private attributes
  var privateVar = 5;
  
  //private methods
  function setVar(arg){
    privateVar = arg;
  };
  function getVar(){
    return privateVar;
  };
  
  //public methods
  return{
    set: setVar,
    get: getVar
  }
}();
// Sample usage:
myRevealingModule.set(7);
myRevealingModule.get();
                                
                            Revision: 43131
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at March 17, 2011 09:11 by coprolit
                            
                            Updated Code
/*
 The idea here is that you have private methods
 which you want to expose as public methods.
*/
var myRevealingModule = function(){
  //private attributes
  var privateVar = 5;
  
  //private methods
  function setVar(){
    var privateVar = 10;
  };
  function getVar(){
    return privateVar;
  };
  
  //public methods
  return{
    set: setVar,
    get: getVar
  }
}();
// Sample usage:
myRevealingModule.get();
// Douglas Crockford style:
var myModule = (function(){
  
  //private attributes
  var privateVar = 5;
  
  //private methods
  var privateMethod = function(){
    return 'Private Test';
  };
  
  return {
    //public attributes
      publicVar    : 10,
    //public methods
    publicMethod : function(){
      return ' Followed By Public Test ';
    }, 
    //let's access the private members
    getData : function(){
      return privateMethod() + this.publicMethod() + privateVar;
    }
  }
})(); //the parens here cause the anonymous function to execute and return
myModule.getData();
                                
                            Revision: 43130
                            
                                                            
                                    
                                        
Initial Code
                                    
                                    
                                                            
                                    
                                        
Initial URL
                                    
                                    
                                                            
                                    
                                        
Initial Description
                                    
                                    
                                                            
                                    
                                        
Initial Title
                                    
                                    
                                                            
                                    
                                        
Initial Tags
                                    
                                    
                                                            
                                    
                                        
Initial Language
                                    
                                    
                                                    
                        at March 17, 2011 08:40 by coprolit
                            
                            Initial Code
var someModule = (function(){
  
  //private attributes
  var privateVar = 5;
  
  //private methods
  var privateMethod = function(){
    return 'Private Test';
  };
  
  return {
    //public attributes
      publicVar    : 10,
    //public methods
    publicMethod : function(){
      return ' Followed By Public Test ';
    }, 
    //let's access the private members
    getData : function(){
      return privateMethod() + this.publicMethod() + privateVar;
    }
  }
})(); //the parens here cause the anonymous function to execute and return
someModule.getData();
                                Initial URL
http://www.addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternsjavascript
Initial Description
"Javascript module pattern emulates the concept of classes in such a way that we're able to include both public/private methods and variables inside a single object, thus shielding/namespacing particular parts from the global scope." When inheritance is not needed and a only few instances is needed (Keep in mind that each instance places a new copy of each function in memory!)
Initial Title
Javascript revealing module pattern template
Initial Tags
javascript, class, object, template, module
Initial Language
JavaScript