从单个实例和多实例的角度来看,为什么我会在模块模式之后编写所有这些额外的代码行,而只使用标准的构造函数,并在构造函数体中定义方法和属性?
模块模式示例:http://jsfiddle.net/T3ZJE/1/
var module = (function () {
// private variables and functions
var foo = 'bar';
// constructor
var module = function () {
};
// prototype
module.prototype = {
constructor: module,
something: function () {
}
};
// return module
return module;
})();
var my_module = new module();
console.log(my_module)
构造函数示例:http://jsfiddle.net/EuvaS/2/
function Module(){
// private variables and functions
var foo = 'bar';
//public methods
this.something = function () {
}
}
var my_module = new Module();
console.log(my_module);
对我而言,最终结果几乎是一样的。两者都可以有公共属性和方法,两者都可以有“私有”变量和方法,可以通过公共方法访问。
两者都会为单例定义一次公共/原型方法,两者都会为对象的多个实例/克隆定义多次。
我错过了什么吗?有什么区别?
答案 0 :(得分:16)
在第一个例子中,foo将是所有module()实例共有的静态变量。意思是,所有实例都将引用相同的变量。
在第二个例子中,每个Module()实例的foo都不同。
除此之外,我认为没有任何区别。
答案 1 :(得分:0)
没有什么特别的区别。但是我不确定这个例子中模块模式的重点是什么。您不需要在模块中包含构造函数。构造函数应该像第二种样式一样使用。但最好在其原型对象中定义方法,除非您需要为每个实例提供它。
再次就目的而言,我认为这里的模块模式不是正确的方式。