轻松掌握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 内存释放问题
Apr 25 Javascript
jquery tab标签页的制作
May 10 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
Sep 05 Javascript
基于JS实现二维码图片固定在右下角某处并跟随滚动条滚动
Feb 08 Javascript
原生js封装运动框架的示例讲解
Oct 01 Javascript
vue综合组件间的通信详解
Nov 06 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
Apr 17 Javascript
jquery分页优化操作实例分析
Aug 23 jQuery
JS数组方法push()、pop()用法实例分析
Jan 18 Javascript
vue实现简单跑马灯效果
May 25 Javascript
通过高德地图API获得某条道路上的所有坐标用于描绘道路的方法
Aug 24 Javascript
JS实现斐波那契数列的五种方式(小结)
Sep 09 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
扩展你的 PHP 之入门篇
2006/12/04 PHP
PHP 字符串分割和比较
2009/10/06 PHP
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
PHP回调函数简单用法示例
2019/05/08 PHP
Laravel + Elasticsearch 实现中文搜索的方法
2020/02/02 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
PHP时间类完整代码实例
2021/02/26 PHP
做网页的一些技巧
2007/02/01 Javascript
JQuery 技巧和窍门整理(8个)
2010/04/22 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
Extjs3.0 checkboxGroup 动态添加item实现思路
2013/08/14 Javascript
ExtJS4中的requires使用方法示例介绍
2013/12/03 Javascript
jQuery调用RESTful WCF示例代码(GET方法/POST方法)
2014/01/26 Javascript
node.js适合游戏后台开发吗?
2014/09/03 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
jQuery soColorPacker 网页拾色器
2016/06/22 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
2017/02/15 Javascript
基于Express框架使用POST传递Form数据
2019/08/10 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
layui实现显示数据表格、搜索和修改功能示例
2020/06/03 Javascript
jQuery实现移动端扭蛋机抽奖
2020/11/08 jQuery
Python将多份excel表格整理成一份表格
2018/01/03 Python
Python基于hashlib模块的文件MD5一致性加密验证示例
2018/02/10 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
python网络编程之五子棋游戏
2020/05/14 Python
Python3爬虫RedisDump的安装步骤
2021/02/20 Python
艺术设计专业个人求职信
2013/09/21 职场文书
给民警的表扬信
2014/01/08 职场文书
动漫专业高职生职业生涯规划书
2014/02/15 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
入党后的感想
2015/08/10 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
利用Python读取微信朋友圈的多种方法总结
2021/08/23 Python
Python Pygame实战在打砖块游戏的实现
2022/03/17 Python
Oracle中日期的使用方法实例
2022/07/07 Oracle
zabbix 代理服务器的部署与 zabbix-snmp 监控问题
2022/07/15 Servers