Search code examples
javascriptoopnamespacescode-organization

Javascript namespacing and OO organization


I have my javascript code as follow:

$(document).ready(function () {

    //call of global functions
    globalFunction1();
    globalFunction2(); //create a new object inside
    globalFunction3();
}

function globalFunction1() {
    // do something directly with jquery selectors
    var testObj1 = new object1($('#tree')); // this is called later in the function
    testObj.doSomething();
}


function globalFunction2() {
    // do other things
}

function globalFunction3() {
    // do something directly with jquery selectors
}

//creating an object in js
var object1 = (function () {
        var tree;

        function object1($tree) {
            tree = $tree;
        });
}
object1.prototype.doSomething = function () {
    .....
};
return fancyStructure;
})();

Normally I have more global functions and if possible I always try to create objects using the new keyword (as in Java or C#) Now, I am asked to provide namespacing in order to avoid function conflict problems. Thing is I am not sure how to achieve that giving my current code and knowing that I need to keep the code Object Oriented. Hence, I am wondering if there is a way to add some namespacing effisciently. Any suggestion will do as long as it is along the lines of adding a namespace.


Solution

  • Just put your functions into an Object:

    var mynamespace = {
        globalFunction1 : function() {
            // do something directly with jquery selectors
            var testObj1 = new object1($('#tree')); // this is called later in the function
            testObj.doSomething();
        },
        globalFunction2 : function() {
            // do other things
        },
        globalFunction3 : function() {
          // do something directly with jquery selectors
        }
    }
    

    and call the functions with

    mynamespace.globalFunction1();
    

    Or you could just define your namespace

    mynamespace = {};
    

    And later add the the functions with

    mynamespace.globalFunction1 = function() {
        //do something
    };