单例模式就如其名一样,一个构造函数在构造出一个对象后,之后再使用这个构造函数构造对象时,不会是新的对象,依旧是上一次的对象,通俗点说,单例模式实现的是一个构造函数只能创造一个新的对象。很不解,为什么要这么做?这个就像什么呢,举个不恰当的例子,就像一家汽车制造厂,在制造完一辆车之后,宣布不再造新车了,之后公司要改型,改成只针对这辆车做维护(维修)的公司。
教科书解释:
- 创建完之后,只有一个实例,之后再怎么创建,都是这一个,方便实例管理,提供了对实例的受控访问。
- 对于频繁创建,销毁对象,这个单例模式实现了对象统一,内存只占有一个对象内存分量,在频繁创建中,大大的节约了系统内存。
//单例模式
var getSingle = function(fn){
var result = null;
return function(){
/*
//这里使用闭包,把result变量驻留在内存
if(!result){
//result = fn();//把回调函数的返回值赋给result
//但是要解决传参问题 所以用apply或call
result = fn.apply(this,arguments);
}
return result;*/
//升级写法
return result || (result=fn.apply(this,arguments));
}
}
function A(name){
this.name = name;
}
A.prototype.getName = function(){
console.log(this.name);
}
//常用的类实例化写法
/*var a = new A('luxi');
var b = new A('jack');
a.getName();//luxi
b.getName();//jack
console.log(a==b);//false*/
//单例模式写法
var a = getSingle(function(name){
var code = new A(name);
return code;
})
a('luxi').getName();//luxi
a('jack').getName();//luxi