javaScript设计模式与开发实践(三)代理模式
代理模式是为一个对象提供一个代用品或占位符,以便控制对它的访问。
虚拟代理实现图片预加载:
var myImage = (function(){ var imgNode = document.createElement( 'img' ); document.body.appendChild( imgNode ); return { setSrc: function( src ){ imgNode.src = src; } } })(); var proxyImage = (function(){ var img = new Image; img.onload = function(){ myImage.setSrc( this.src ); } return { setSrc: function( src ){ myImage.setSrc( 'file:// /C:/Users/svenzeng/Desktop/loading.gif' ); img.src = src; } } })(); proxyImage.setSrc( 'http:// imgcache.qq.com/music/photo/k/000GGDys0yA0Nk.jpg' );
缓存代理计算乘积:
var mult = function() { var a = 1; for(var i=0,len=arguments.length; i<len; 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,3,4); proxyMult(1,2,3,4);