zoukankan      html  css  js  c++  java
  • js设计模式慢慢消化QAQ

    设计模式 

    (Design Pattern)是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。
    1.惰性函数
      
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            #box{
                 100px;
                height: 100px;
            }
        </style>
    </head>
    <body>
        <div id="box"></div>
    </body>
    </html>
    <script>
        /*
            惰性函数
    
    
    
         */
    
         var oBox = document.getElementById("box");
        function getStyle(obj,attr){
            if(obj.currentStyle){
                getStyle = function(obj,attr){
                    return obj.currentStyle[attr];
                }
            }else{
                getStyle = function(obj,attr){
                    return getComputedStyle(obj,false)[attr];
                }
            }
    
            return getStyle(obj,attr);
        }
        console.log(getStyle(oBox,"width"));
        
        console.log(getStyle)
    
    
    </script>
    

      

      

    2.单例模式

        每次创建出来的都是同一个对象

    1.方式一

      

    	var fn = (function(){
    		var div;
    		return function(){
    			if(!div){
    				div = document.createElement("div");
    			}
    			return div;
    		}
    	})()
          console.log(fn)
    	var a = fn();
    	var b = fn();
    	console.log(a == b);
    	
    

     2.方式二

      

    	function createDiv(){
    		if(!this.div){
    			createDiv.prototype.div = document.createElement("div");
    		}
    
    		return this.div
    	}
    	var a = new createDiv()
    	var b = new createDiv();
    	console.log(a == b)
    	
    

      3.方案三

      

    	
    	var obj = {};
    	function fn(){
    		if(!obj.div){
    			obj.div = document.createElement("div");
    		}
    
    		return obj.div;
    	}
    
    
    	var a = fn();
    	var b =fn();
    	console.log(a == b)
    	
    

      3.代理模式(实现图片预加载)

      

    var myImg = (function(){
    	var img = document.createElement("img");
    	document.body.appendChild(img);
    	return {
    		setImg:function(src){
    			
    			img.src = src
    		}
    	}
    })() 
    
    
    var proxyImg = (function(){
    	//img对象  提前加载一张图片如果给这个图片加了一个src属性后就相当于在浏览器中缓存了一张图片
    	var image = new Image();
    	image.onload = function(){
    		alert("加载完毕")
    		myImg.setImg(image.src);
    	}
    	return {
    		setSrc:function(src){
    			//loding
    			myImg.setImg("1.png");
    			//需要加载的图片
    			image.src = src;
    
    		}
    	}
    })()
    
    var src = "https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3127448566,3364301089&fm=26&gp=0.jpg";
    
    proxyImg.setSrc(src);
    

      4.观察者 (发布订阅模式)

    function gongsi () {
    	this.员工们 = []
    	this.发工资 = function(){
    		for(var i in this.员工们){
    			this.员工们[i].工商银行(10000+Math.random()*18000);
    		}
    	}
    	this.招聘 = function(p){
    		this.员工们.push(p);
    	}
    }
    
    
    function Person(name){
    	this.name = name;
    	this.工商银行 = function(money){
    		console.log(this.name+"收到"+money+"可以去大宝剑了");
    	}	
    }
    
    
    var qianfeng =new  gongsi();
    
    qianfeng.招聘(new Person("宋磊"))
    qianfeng.招聘(new Person("王多"))
    qianfeng.招聘(new Person("杨杨"))
    qianfeng.招聘(new Person("钟瑞"))
    
    
    qianfeng.发工资()
    

      

  • 相关阅读:
    CocosCreator-Widget,前后台切换
    Unity获取未激活游戏对象的方法 、坐标转换
    Mathf函数
    C# activeSelf、activeInHierarchy、SetActive、SetActiveRecursively
    C# 碰撞,射线,点击,周期函数等基本代码
    TCP/IP 协议栈
    笔记—《程序员自我修养》
    Container With Most Water 双指针法
    多线程服务器 编程模型
    c++ 高效并发编程
  • 原文地址:https://www.cnblogs.com/moonzwt/p/9588655.html
Copyright © 2011-2022 走看看