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);

 

posted @ 2017-02-23 13:51  dreamerjdw  阅读(135)  评论(0编辑  收藏  举报