轻松掌握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 相关文章推荐
ExtJS 2.2.1的grid控件在ie6中的显示问题
May 04 Javascript
javascript Math.random()随机数函数
Nov 04 Javascript
多浏览器支持的右下角浮动窗口
Apr 01 Javascript
Jquery 一次处理多个ajax请求的代码
Sep 02 Javascript
jquery使用ul模拟select实现表单美化的方法
Aug 18 Javascript
Clipboard.js 无需Flash的JavaScript复制粘贴库
Oct 02 Javascript
javascript实现别踩白块儿小游戏程序
Nov 22 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
Jul 25 Javascript
JS常见DOM节点操作示例【创建 ,插入,删除,复制,查找】
May 14 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
Mar 14 Javascript
微信公众号生成新浪短网址的实现(快速生成)
Aug 18 Javascript
JS使用setInterval计时器实现挑战10秒
Nov 08 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
dede3.1分页文字采集过滤规则详说(图文教程)续四
2007/04/03 PHP
从零开始学YII2框架(三)扩展插件yii2-gird
2014/08/20 PHP
php英文单词统计器
2016/06/23 PHP
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
Javascript技术技巧大全(五)
2007/01/22 Javascript
javascript实现的像java、c#之类的sleep暂停的函数代码
2010/03/04 Javascript
jquery ui resizable bug解决方法
2010/10/26 Javascript
window.ActiveXObject使用说明
2010/11/08 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
javascript仿百度输入框提示自动下拉补全
2016/01/07 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
vue print.js打印支持Echarts图表操作
2020/11/13 Javascript
Pycharm学习教程(1) 定制外观
2017/05/02 Python
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
python正则表达式爬取猫眼电影top100
2018/02/24 Python
Python连接Mssql基础教程之Python库pymssql
2018/09/16 Python
通过代码实例了解Python sys模块
2020/09/14 Python
Python datetime模块的使用示例
2021/02/02 Python
澳大利亚购买太阳镜和眼镜网站:Glamoureyes
2020/09/22 全球购物
IBatis持久层技术
2016/07/18 面试题
计算机通信专业推荐信
2014/02/22 职场文书
学生鉴定评语大全
2014/05/05 职场文书
诉讼财产保全担保书
2014/05/20 职场文书
公司年底活动方案
2014/08/17 职场文书
2014年保卫工作总结
2014/12/05 职场文书
清明节扫墓活动总结
2015/02/09 职场文书
班级管理经验交流材料
2015/11/02 职场文书
python将图片转为矢量图的方法步骤
2021/03/30 Python
SpringBoot整合Redis入门之缓存数据的方法
2021/11/17 Redis
利用Python实现翻译HTML中的文本字符串
2022/06/21 Python