Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the difference between these namespacing methods?

Tags:

javascript

I'm new to JavaScript and am trying to understand how to use namespaces to avoid naming conflicts. So far, the two most popular methods I've found for creating namespaces are these:

Method 1:

var MYAPPLICATION = {
    calculateVat: function (base) {
        return base * 1.21;
    },
    product: function (price) {
        this.price = price;
        this.getPrice = function(){
                          return this.price;
                       };
    },
    doCalculations: function () {
        var p = new MYAPPLICATION.product(100);
        alert(this.calculateVat(p.getPrice()));
    }
}

Method 2:

var DED = (function() {

    var private_var;

    function private_method()
    {
        // do stuff here
    }

    return {
        method_1 : function()
            {
                // do stuff here
            },
        method_2 : function()
            {
                // do stuff here
            }
    };
})();

Is the difference that the second method allows you to have private methods and variables, since only what is inside of the object being returned will be globally accessible? Which of these methods is best (or is there a better way)?

like image 861
Nate Avatar asked Oct 21 '22 05:10

Nate


2 Answers

If you write an API for other people, I think method two is better. Example:jQuery.

In a web page, I prefer method one. Example:stackoverflow

In method two, you can not read and write functions and variables that is private, so if there is a bug, you can not read something by developer-tools for debug.

like image 78
user3701445 Avatar answered Oct 24 '22 14:10

user3701445


Second method is called 'module' pattern. Makes it comfortable for developers to use your code. Self-invoking function creates scope, so you only expose methods that you want to make public by returning object that contains references to those methods (public API). Those methods can have a lot of private helper functions and variables that you keep private for your own use. Most of the libraries are written this way. It's generally good to structure your library like that. Here's a link to the website that explains it well : http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html

First method is just the way to put all the related functions together. You can make those for personal use in your module. Example: Calc.add(5,5), Calc.subtract(3,2), Calc.multiply(3,3); add, subtract, multiply share same namespace because they are related.

like image 30
sergeyz Avatar answered Oct 24 '22 12:10

sergeyz