轻松掌握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 相关文章推荐
javascript 弹出层组件(升级版)
May 12 Javascript
Jquery颜色选择器ColorPicker实现代码
Nov 14 Javascript
深入理解javascript中的立即执行函数(function(){…})()
Jun 12 Javascript
JS去除iframe滚动条的方法
Apr 01 Javascript
javascript HTML5 Canvas实现圆盘抽奖功能
Apr 11 Javascript
修改js confirm alert 提示框文字的简单实例
Jun 10 Javascript
vue实现全选、反选功能
Nov 17 Javascript
动态创建Angular组件实现popup弹窗功能
Sep 15 Javascript
angular 内存溢出的问题解决
Jul 12 Javascript
React事件处理的机制及原理
Dec 03 Javascript
深入了解JavaScript 防抖和节流
Sep 12 Javascript
vue element ui validate 主动触发错误提示操作
Sep 21 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
自己前几天写的无限分类类
2007/02/14 PHP
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
PHP多维数组排序array详解
2017/11/21 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
2019/05/13 PHP
javascript类继承机制的原理分析
2009/09/12 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
Ajax中解析Json的两种方法对比分析
2015/06/25 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
js改变html的原有内容实现方法
2016/10/05 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
Vue.js 实现数据展示全部和收起功能
2018/09/05 Javascript
Python实现完整的事务操作示例
2017/06/20 Python
Python读csv文件去掉一列后再写入新的文件实例
2017/12/28 Python
使用Python读取大文件的方法
2018/02/11 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
Python3实现的Mysql数据库操作封装类
2018/06/06 Python
Python实现高斯函数的三维显示方法
2018/12/29 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
2019/08/21 Python
Python装饰器用法与知识点小结
2020/03/09 Python
CSS3中currentColor关键字的妙用
2016/02/27 HTML / CSS
美国领先的精品家居照明和装饰产品在线零售商:LightsOnline.com
2018/01/23 全球购物
MADE荷兰:提供原创设计师家具
2018/04/03 全球购物
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
敏捷开发的主要原则都有哪些
2015/04/26 面试题
关于迟到的检讨书
2014/01/26 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
《鲁班和橹板》教学反思
2014/04/27 职场文书
红头文件任命书范本
2014/06/05 职场文书
声乐专业大学生职业生涯规划书:理想的未来需要自己去打造
2014/09/20 职场文书
公司股东出资证明书
2014/11/01 职场文书
感谢信范文大全
2015/01/23 职场文书
Django rest framework如何自定义用户表
2021/06/09 Python