模块模式
- 单例:只有一个实例的对象
- 模块模式:为单例创建私有变量和方法
代码案例:
var sinleton = function(){
//定义私有变量和方法
var privateV = 10086;
function privateF (){
return privateV;
}
//公有方法和属性
return {
publicV : true,
publicF : function(){
privateV++;
return privateF();
}
};
}();
在以上案例中,由于privateF()方法是在匿名函数中定义的,所以他的公有方法才有权访问到私有变量和私有方法。从本质来讲,这个对象字面量定义的是单例的公共接口。
简而言之,如果必须创建一个u第项并以某些数据对其进行初始化,同时还要公开一些能够访问到这些私有数据的方法,那么就可以使用模块模式
增强的模块模式
这种模式适合有些单例必须是具体类型的实例,同时还必须添加某些属性和方法对其加以强化的情形。
代码案例:
var singleton = function(){
var privateV = 10086;
var privateF = function(){
return privateV;
}
//创建具体类型对象
var obj = new SomeType();
obj.publicV = true;
obj.publicF = function(){
privateV++;
return privateF();
};
return obj;
}
这个实例必须是SomeType的实例,且相较于原型有了私有变量和方法以及公有方法。