我是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);加、减、乘共享同一个命名空间,因为它们是相关的。