- 问题情境
有些节点如登录浮窗,*且可以全局访问?*只需有一个实例即可,重复实例化多个比较耗资源 - 解决思路
实例化之前加个判断(flag),若创建过则直接返回当前实例。
- 具体实现
1.传统面向对象,用类的属性来保存instance
Singleton.instance = null;
Singleton.getInstance = function(){
if (!this.instance) {
this.instance = new CreateInstance();
}
return this.instance;
}
2.在JavaScript中,使用高阶函数,用闭包来保存instance
var getSingle = function(fn){
var result;
return function(){
result || ( result = fn.apply(this, arguments) );
}
}
var a = getSingle(createDiv);
var b = getSingle(createDiv);
a === b;//true
- JavaScript 中的单例模式
没有类的概念,直接创建对象即可。
全局变量就是一个单例。但是很容易命名污染,因此采用命名空间可减少全局变量;或者采用闭包保存局部变量
- 优缺点
惰性单例,需要的时候再创建。