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



我是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
            }
    };
})();

第二个方法允许您拥有私有方法和变量,因为只有返回的对象内部的内容才可以全局访问,这是不同的吗?这些方法中哪一个是最好的(或者有更好的方法)?

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

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

在方法二中,你不能读写私有的函数和变量,所以如果有一个bug,你不能通过开发工具读取一些东西来进行调试。

第二个方法叫做'module' pattern。使开发人员能够轻松地使用您的代码。自调用函数创建作用域,因此您只能通过返回包含对这些方法引用的对象(公共API)来公开您想要公开的方法。这些方法可以有很多私有的辅助函数和变量,您可以将它们保留为私有以供自己使用。大多数库都是以这种方式编写的。这样构建库通常是好的。这里有一个网站的链接,解释得很好:http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html

第一个方法只是将所有相关函数放在一起的方法。您可以在您的模块中为个人使用这些。例子:Calc.add(5,5), Calc.subtract(3,2), Calc.multiply(3,3);加、减、乘共享同一个命名空间,因为它们是相关的。

最新更新