我是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
}
};
})();
第二种方法允许您拥有私有方法和变量的区别是什么,因为只有返回的对象内部才能全局访问?哪种方法最好(或者有更好的方法)?
答案 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); 添加,减去,乘以共享相同的命名空间,因为它们是相关的。