轻松掌握JavaScript代理模式


Posted in Javascript onAugust 26, 2016

在面向对象设计中,有一个单一职责原则,指就一个类(对象、函数)而言,应该仅有一个引起它变化的原因。如果一个对象承担了过多的职责,就意味着它将变得巨大,引起它变化的原因就多,它把这些职责耦合到了一起,这种耦合会导致程序难于维护和重构。 

这时候,我们可以把该对象(本体)的其中一部分职责分离出来给一些第三方对象去做,本体只管自己的一些核心职责,这些第三方对象就称作代理。代理对象可以作为对象(也叫“真正的主体”)的保护者,让真正的主体对象做尽量少的工作。在代理设计模式中,一个对象充当了另一个对象的接口的角色。 

通常代理和本体的接口应该保持一致性,这样当不需要代理的时候,用户可直接访问本体。 

当我们不方便直接访问一个对象时,就可以考虑给该对象招一个代理。 

代理可用于:图片预加载、合并HTTP请求(代理收集一定时间内的所有HTTP请求,然后一次性发给服务器)、惰性加载(通过代理处理和收集一些基本操作,然后仅在真正需要本体的时候才加载本体)、缓存代理(缓存请求结果、计算结果)等

例子1:图片预加载

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('loading.gif');
   img.src = src;
  }
 }
})();

proxyImage.setSrc('show.jpg');

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js setattribute批量设置css样式
Nov 26 Javascript
js导出table到excel同时兼容FF和IE示例
Sep 03 Javascript
node+express+jade制作简单网站指南
Nov 26 Javascript
JS实现文字放大效果的方法
Mar 03 Javascript
JS中this上下文对象使用方式
Oct 09 Javascript
浅谈在js传递参数中含加号(+)的处理方式
Oct 11 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
Jan 17 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
Sep 06 jQuery
vue-cli配置文件——config篇
Jan 04 Javascript
vue文件树组件使用详解
Mar 29 Javascript
微信小程序分享小程序码的生成(带参数)以及参数的获取
Mar 25 Javascript
vue中使用v-for时为什么不能用index作为key
Apr 04 Javascript
轻松掌握JavaScript单例模式
Aug 25 #Javascript
很酷的星级评分系统原生JS实现
Aug 25 #Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
Aug 25 #Javascript
轻松掌握JavaScript策略模式
Aug 25 #Javascript
Javascript 6里的4个新语法
Aug 25 #Javascript
Javascript实现代码折叠功能
Aug 25 #Javascript
深入浅出ES6之let和const命令
Aug 25 #Javascript
You might like
一个ORACLE分页程序,挺实用的.
2006/10/09 PHP
PHP实现百度人脸识别
2019/05/06 PHP
PHP token验证生成原理实例分析
2019/06/05 PHP
javascript 对表格的行和列都能加亮显示
2008/12/26 Javascript
JS 判断undefined的实现代码
2009/11/26 Javascript
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
js删除所有的cookie的代码
2010/11/25 Javascript
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
setInterval()和setTimeout()的用法和区别示例介绍
2013/11/17 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
微信JSSDK上传图片
2015/08/23 Javascript
javascript对象的创建和访问
2016/03/08 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
bootstrap网格系统使用方法解析
2017/01/13 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
jQuery实现的文字逐行向上间歇滚动效果示例
2017/09/06 jQuery
使用async await 封装 axios的方法
2018/07/09 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
jQuery实现简单三级联动效果
2020/09/05 jQuery
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
[01:31:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第二场 1月10日
2021/03/11 DOTA
python简单读取大文件的方法
2016/07/01 Python
windows下python之mysqldb模块安装方法
2017/09/07 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
2018/11/30 Python
python简单验证码识别的实现方法
2019/05/10 Python
如何定义TensorFlow输入节点
2020/01/23 Python
管理学专业个人求职信范文
2013/12/13 职场文书
教堂婚礼主持词
2014/03/14 职场文书
个人投资合作协议书
2014/10/12 职场文书
公证处委托书
2015/01/28 职场文书
护士节慰问信
2015/02/15 职场文书
心术观后感
2015/06/11 职场文书
银行柜员优质服务心得体会
2016/01/22 职场文书
2019感恩宣传标语!
2019/07/05 职场文书
python 自动刷新网页的两种方法
2021/04/20 Python
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python