定义
为其它对象提供一种代理以控制这个对象的访问,具体执行的功能还是这个对象本身
场景
- 模块职责单一且复用
- 两个模块间的交互需要一定限制关系
邮件代理过滤
```javascript // 发邮件,不是qq邮箱的拦截 const emailList = [‘qq.com’, ‘163.com’, ‘gmail.com’];
// 代理 const ProxyEmail = function(email) { if (emailList.includes(email)) { // 屏蔽处理 } else { // 转发,进行发邮件 SendEmail.call(this, email); } };
const SendEmail = function(email) { // 发送邮件 };
// 外部调用代理 ProxyEmail(‘cvte.com’); ProxyEmail(‘ojbk.com’);
<a name="uEynu"></a>## 图片代理```javascript// 本体var domImage = (function() {var imgEle = document.createElement('img');document.body.appendChild(imgEle);return {setSrc: function(src) {imgEle.src = src;}};})();// 代理var proxyImage = (function() {var img = new Image();img.onload = function() {domImage.setSrc(this.src); // 图片加载完设置真实图片src};return {setSrc: function(src) {domImage.setSrc('./loading.gif'); // 预先设置图片src为loading图img.src = src;}};})();// 外部调用proxyImage.setSrc('./product.png');
