zoukankan      html  css  js  c++  java
  • javascript设计模式-(七)

    惰性加载函数

    在 Web 开发中,因为浏览器之间的实现差异,一些嗅探工作总是不可避免。比如我们需要 一个在各个浏览器中能够通用的事件绑定函数 addEvent

    常见写法 一

    	var addEvent = function(elem, type, handler) {
    		if (window.addEventListener) {
    			return elem.addEventListener(type, handler, false);
    		} else if (window.attachEvent) {
    			elem.attachEvent("on" + type, handler);
    		}
    	};
    

    常见写法 二

    	//在代码加载的时候就立刻进行一次判断,以便让 addEvent2 返回一个包裹了正确逻辑的函数,目前的 addEvent
    
    	//函数依然有个缺点,也许我们从头到尾都没有使用过 addEvent2 函数,这样看来,前一次的浏览器嗅探就是完全
    
    	//多余的操作,而且这也会稍稍延长页面 ready的时间
    
    	var addEvent2 = (function() {
    		if (window.addEventListener) {
    			return function(elem, type, handler) {
    				elem.addEventListener(type, handler, false);
    			}
    		} else if (window.attachEvent) {
    			return function(elem, tye, handler) {
    				elem.attachEvent("on" + type, handler);
    			}
    		}
    	})();
    

    常见写法 三 ( 惰性载入函数方案 )

    	//惰性载入函数方案,第一次进入条件分支之后,在函数内部会重写这个函数,
    
    	//重写之后的函数就是我们期望的 addEvent 函数,在下一次进入 addEvent3 
    
    	//函数的时候, addEvent3函数里不再存在条件分支语句
    
    	var addEvent3=function(){
    		if(window.addEventListener){
    			addEvent3=function(elem,type,handler){
    				elem.addEventListener(type,handler,false);
    			}
    		}else if(window.attchEvent){
    			addEvent3=function(elem,type,handler){
    				elem.attachEvent("on"+type,handler);
    			}
    		}
    	}
    

    函数反柯里化(uncurring)

    反curring就是把原来已经固定的参数或者this上下文等当作参数延迟到未来传递.

    	Function.prototype.uncurring=function(){
    		var self=this;//只调用这个方法的函数对象
    		return function(){
    			var obj=Array.prototype.shift.call(arguments);
    			return self.apply(obj,arguments);
    		}
    	}
    
    	var push=Array.prototype.push.uncurring();
    
    	(function(){
    		push(arguments,4);
    		console.log(arguments);
    	})(1,2,3);
    
  • 相关阅读:
    XML 约束
    XML 高级
    XML 基础
    XML系列【目录】
    Java11 新特性
    Java10 新特性
    Java9 新特性 (二)语法改进
    Java9 新特性 (一)新增特性
    第一章:Class 文件结构
    java面试题全集(上)--java基础
  • 原文地址:https://www.cnblogs.com/hlere/p/6748743.html
Copyright © 2011-2022 走看看