轻松掌握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 相关文章推荐
jquery获取ASP.NET服务器端控件dropdownlist和radiobuttonlist生成客户端HTML标签后的value和text值
Jun 28 Javascript
chrome原生方法之数组
Nov 30 Javascript
Javascript基础教程之argument 详解
Jan 18 Javascript
JS实现部分HTML固定页面顶部随屏滚动效果
Dec 24 Javascript
原生js仿jquery一些常用方法(必看篇)
Sep 20 Javascript
javaScript语法总结
Nov 25 Javascript
js转换对象为xml
Feb 17 Javascript
浅谈angular.copy() 深拷贝
Sep 14 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
Jan 21 Javascript
vue2.0 + ele的循环表单及验证字段方法
Sep 18 Javascript
vue项目中将element-ui table表格写成组件的实现代码
Jun 12 Javascript
vue2.0实现列表数据增加和删除
Jun 17 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/10/09 PHP
PHP session会话的安全性分析
2011/09/08 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
Symfony2安装的方法(2种方法)
2016/02/04 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
PHP实现PDO操作mysql存储过程示例
2019/02/13 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
jquery选择器之内容过滤选择器详解
2014/01/27 Javascript
Javascript URI 解析介绍
2015/03/15 Javascript
学习javascript面向对象 掌握创建对象的9种方式
2016/01/04 Javascript
详解Javascript函数声明与递归调用
2016/10/22 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
2017/08/30 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
python3 读写文件换行符的方法
2018/04/09 Python
对dataframe进行列相加,行相加的实例
2018/06/08 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
python 解决print数组/矩阵无法完整输出的问题
2020/02/19 Python
CK加拿大官网:Calvin Klein加拿大
2020/03/14 全球购物
衰败城市英国官网:Urban Decay英国
2020/04/29 全球购物
营销主管自我评价怎么写
2013/09/19 职场文书
经济信息管理专业大学生求职信
2013/09/27 职场文书
专升本个人自我评价
2013/12/22 职场文书
实用求职信范文分享
2013/12/25 职场文书
《奇妙的国际互联网》 教学反思
2014/02/25 职场文书
《少年王勃》教学反思
2014/04/27 职场文书
2014年创先争优活动总结
2014/05/04 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
运动会稿件100字
2014/09/24 职场文书
运动会表扬稿
2015/01/16 职场文书
低端且暴利的线上线下创业项目分享
2019/09/03 职场文书