JavaScript: Design Patterns 03 – Module Pattern

Module Pattern

Solved the following problems in JavaScript

  • Creating access control to data that should be private
  • Providing a clear public API for custom libraries
  • True encapsulation that was not built into JavaScript to start with

Utilizing IIFEs to Control access

Immediately Invoked Functional Expression

// IIFE will execute and return an object literal
var myLibrary = (function(){

// Private scope as everything within the anonymous function is hidden
// Private variables
let privateData = 'this is private stuff';
// Private functions
function doSomethingPrivate(){
console.log('Just did something private.')
}

// The returned object contains the public API to the library
return {
doThis: function(){
console.log('This was done.');
},
doThat: function(){
console.log('That was done.');
/*
Accessible because this object was created within the scope of the
anonymous function that was executed by the IIFE.
*/
doSomethingPrivate();
}
}

})();

// Accessible because they are on the API object
myLibrary.doThis();
myLibrary.doThat();

// NOT accessible because it is hidden within the scope of the anonymous function
// doSomethingPrivate(); // Uncommenting this line will throw an error

Published by

Tim Clark

Experienced Business Owner, Chief Information Officer, Vice President, Chief Software Architect, Application Architect, Project Manager, Software Developer, Senior Web Developer, Graphic Designer & 3D Modeler, University Instructor, University Program Chair, Academic Director. Specialties: Ruby, Ruby on Rails, JavaScript, JQuery, AJAX, Node.js, React.js, Angular.js, MySQL, PostgreSQL, MongoDB, SQL Server, Responsive Design, HTML5, XHTML, CSS3, C#, ASP.net, Project Management, System Design/Architecture, Web Design, Web Development, Adobe CS6 (Photoshop, Illustrator)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s