javascript设计模式8代理模式
代理模式是非常常用的一种模式,顾名思义,为两个对象之间添加一层代理,通过代理访问想要访问的对象,而不是直接去访问或修改。
虚拟代理
//图片预加载代理 var myImg= (function(){ var imgnode = document.createElement('img') document.body.appendChild(imgnode) return { setSrc : function(src){ imgnode.src = src; } } })() var proxyImg = (function(){ var img = new Image; img.onload = function(){ myImg.setSrc(this.src) } return { setSrc: function(src){ myImg.setSrc('file:// /c:/user/loading.gif') img.src = src; } } })() proxyImg.setSrc('http:// qq.com/photo.jpg')
缓存代理
var mult = funcion(){ var a = 1; for(var i = 0 , l = arguments.length; i < l ;i++){ a = a* arguments[i]; } return a; } var proxyMult = (function(){ var cache = {} return function(){ var args = Array.prototype.join.call(arguments,',') if(args in cache){ return cache[args] } return cache[args] = mult.apply(this,arguments) } })() proxyMult(1,2,4
使用高阶函数动态创建代理
var mult = funcion(){ var a = 1; for(var i = 0 , l = arguments.length; i < l ;i++){ a = a* arguments[i]; } return a; } var createProxyFactory = function(fn){ var cache = {} return function(){ var args = Array.prototype.join.call(arguments,',') if(args in cache){ return cache[args] } return cache[args] = fn.apply(this,arguments) } } var proxyMult = createProxyFactory(mult) proxyMult(1,3,4)
Think Different, Make Different-编程是一个习惯