Robust Namespacing

This fiddle is meant to provide an example of how robust namespacing might be done in JavaScript.

by Michael Perrenoud

HTML

<div id="log"></div>

JavaScript

console.log = function (log) {
    document.getElementById('log').innerHTML +=
        '<p>' + log + '</p>'
}

// here is the first type of definition that I provided
// where we initialize the entire object
var Company = {
    Module2: {
        fn2: function () {
            console.log('Executing Module2.fn2 ...');
        }
    }
}

// here is how we might "safely" define new modules
// or new definitions on existing modules
var Module1 = Company.Module1 || (Company.Module1 = {});
Module1.fn1 = Module1.fn1 || (Module1.fn1 = function () {
    console.log('Executing Module1.fn1 ...');
});

// execute the function from the "using" variable
Module1.fn1();

// execute the function from it's fully-qualified namespace
Company.Module1.fn1();

// execute the previously built function
Company.Module2.fn2();