这些命名空间方法有什么区别?

时间:2014-07-18 15:51:20

标签: javascript

我是JavaScript新手,我正在尝试了解如何使用命名空间来避免命名冲突。到目前为止,我在创建命名空间时发现的两种最流行的方法是:

方法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()));
    }
}

方法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
            }
    };
})();

第二种方法允许您拥有私有方法和变量的区别是什么,因为只有返回的对象内部才能全局访问?哪种方法最好(或者有更好的方法)?

2 个答案:

答案 0 :(得分:2)

如果您为其他人编写API,我认为方法二更好。例如:。jQuery的

在网页中,我更喜欢方法一。例如:计算器

在方法二中,你不能读写私有的函数和变量,所以如果有错误,你就无法通过developer-tools读取一些东西进行调试。

答案 1 :(得分:1)

第二种方法称为“模块”模式。使开发人员能够轻松使用您的代码。自调用函数创建范围,因此您只需通过返回包含对这些方法的引用的对象(公共API)来公开要公开的方法。这些方法可以有很多私有帮助函数和变量,您可以保密以供自己使用。大多数库都是以这种方式编写的。像这样构建你的库通常是好的。 以下是指向该网站的链接:http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html

第一种方法就是将所有相关功能放在一起的方法。您可以在模块中将它们用于个人用途。例:     Calc.add(5,5),Calc.subtract(3,2),Calc.multiply(3,3); 添加,减去,乘以共享相同的命名空间,因为它们是相关的。