JavaScript单例模式

单例模式:一个类只有惟一的一个实例,并且提供全局访问。

一个简单的单例模式如下

    	//单例模式简单实现
    	// 单例模式就是保证一个类只有一个实例
    	function Single(name){
    		this.name=name;
    		if (!Single.instance) {//undefined取非为true
    			Single.instance=this;
    		}
    		return Single.instance
    	}
    	
    	var my1=new Single("tom");
    	var my2=new Single("jack");
    	console.log(my1===my2)//true
    	// console.log(Single.instance)

惰性单例:单例模式的重点,只有需要的时候才创建实例

应用场景:曾经在项目中应用过惰性单例。大概需求是这样的:进入主页面,在不点击按钮就弹出一个图片div,点击按钮时才弹出。当时的开发过程(以前还是小白的时候)经历了以下:利用display属性做切换,点击按钮的时候设为block其他时间为none,潜在问题:

  • 用户可能根本不会点击按钮,白白浪费了DOM节点

好了,我就来动态添加你不就行了吗!用的$(".box").append(..html...),又出现问题了:

  • 用户点击了按钮,叮~弹出了我们的内容框,但是哎呀我不小心手抖了又点了一次???叮 ...又弹出来一个一模一样的....用户“excuse me?”

这显然是不符合需求的,好的,我再改,判断这个节点存不存在,存在的话我先remove掉再新建一个不就行了嘛!又出问题了:

  • remove节点以及创建节点这样的DOM操作显然会拖慢页面加载速度影响用户体验的

好的,完美主义者一定要坚持到最后!此时就是用的我们的惰性单例模式使用的时候再创建,且只创建一次。

    var createDiv=(function(){
    		var div;
    		return function(){
    		if (!div) {
    		    $('.box').append(" <p id='myId'>Hello world!</p>");
    			div=document.getElementById("myId");
	    	}
	    		return div;
    	}
    })();

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值