javascript设计模式-----单例模式

一、单例模式1   (构造函数的静态属性保存实例)

function Universe(){
				//如果实例存在则直接返回
				if(typeof Universe.instance === 'object')){
					return Universe.instance;)
				}
				
				this.start_time = 0;
				this.bang = 'big';
				
				Universe.instance = this;
				
				return this;
			}
			//测试
			var uni = new Universe();
			var uni2 = new Universe();
			uni === uni2 //结果为true;

缺点:instance 属性是公开的,可以任意修改


二、单例模式2  (闭包--私有静态成员保存实例--重写构造函数)

function Universe(){
				//缓存实例
				var instance = this;
				
				this.start_time = 0;
				this.bang = 'big';
				
				//重写构造函数
				Universe = function(){
					return instance;
				};
			}
			//测试
			var uni = new Universe();
			var uni2 = new Universe();
			uni === uni2 //结果为true;

缺点:重写构造函数会造成原型的改变,但返回的引用却是旧构造函数对象的引用,导致丢失初始化后添加的扩展,因为没有指向新构造函数对象的引用

改进:  (让实例引用指向新构造函数)

function Universe(){
				//缓存实例
				var instance ;
				
				//重写构造函数
				Universe = function(){
					return instance;
				};
				
				//保留原型属性\n
				Universe.prototype = this;
				instance = new Universe();
				//重置构造函数指针
				instance.constructor = Universe;
				
				//功能
				this.start_time = 0;
				this.bang = 'big';
				
			}

三、单例模式3( 即时函数,模块模式,私有成员保存实例)

var Universe = (function(){
				var instance;
				return function(){
					if(instance){
						return instance;
					}
					instance = this;
					
					//功能
					this.start_time = 0;
					this.bang = 'big';
				}
			})()

个人推荐此种模式,如果需要扩展,则应自行提供扩展接口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值