**
单例模式
**
保证一个类仅有一个实例,并提供访问他的全局访问点。
用内部变量来标示当前是否已创建对象,是则返回已创建的对象,否则进行创建,并返回。
JavaScript 本身没有类,需要某个对象直接创建即可,这个对象就是单列模式的单个实例,而JavaScript模拟类的实现是为了能创建多个相同实例。再对这个模拟类实现单例是倒回本身特性。
1.单独实现为单例模式的类
// 单独实现为单例模式的类
var SingleOrigin = (function(win){
var instance = null;
var SingleOrigin = function(){
if (instance) return instance;
this.init();
instance = this;
// return instance = this;
}
SingleOrigin.prototype.init = function(){
this.left = 0;
this.top = 0;
}
return SingleOrigin;
})(window);
var a = new SingleOrigin();
var b = new SingleOrigin;
console.log(a === b); // true
2.使用代理将 普通类 代理为 单例模式类(封装个新类)
// 使用代理将 普通类 代理为 单例模式类
var Origin0 = function(){
this.init();
}
Origin0.prototype.init = function(){
this.left = 0;
this.top = 0;
}
// 普通类创建实例
var aa2 = new Origin0;
var bb2 = new Origin0;
console.log(aa2 === bb2); // false
// 代理为 ProxySingleOrigin
var ProxySingleOrigin = (function(win){
var instance = null;
return function(){
if(instance) return instance;
instance = new Origin0;
return instance;
}
})(window);
var aa = new ProxySingleOrigin;
var bb = new ProxySingleOrigin;
console.log(aa === bb); // true
部分代码引用和修改:《JavaScript 设计模式与实践》by曾探,