Pattern - Module Namespacing

by zachshallbetter

JavaScript

var myNamespace = (function() {

    // Initially defining the variables    
    var myPrivateVar, myPrivateMethod;

    // A private counter variable
    myPrivateVar = 0;

    // A private function which logs any arguments
    myPrivateMethod = function(foo) {
        console.log(foo);
    };

    return {

        // A public variable
        myPublicVar: "foo",

        // A public function utilizing privates
        myPublicFunction: function(bar) {

            // Increment our private counter
            myPrivateVar++;

            // Call our private method using bar
            myPrivateMethod(bar);

        }
    };

})();

// Returns "foo"
console.log(myNamespace.myPublicVar);

// Returns undefined
console.log(myNamespace.myPublicFunction.myPrivateMethod);