定义

为其它对象提供一种代理以控制这个对象的访问,具体执行的功能还是这个对象本身

场景

  • 模块职责单一且复用
  • 两个模块间的交互需要一定限制关系

    邮件代理过滤

    ```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’);

  1. <a name="uEynu"></a>
  2. ## 图片代理
  3. ```javascript
  4. // 本体
  5. var domImage = (function() {
  6. var imgEle = document.createElement('img');
  7. document.body.appendChild(imgEle);
  8. return {
  9. setSrc: function(src) {
  10. imgEle.src = src;
  11. }
  12. };
  13. })();
  14. // 代理
  15. var proxyImage = (function() {
  16. var img = new Image();
  17. img.onload = function() {
  18. domImage.setSrc(this.src); // 图片加载完设置真实图片src
  19. };
  20. return {
  21. setSrc: function(src) {
  22. domImage.setSrc('./loading.gif'); // 预先设置图片src为loading图
  23. img.src = src;
  24. }
  25. };
  26. })();
  27. // 外部调用
  28. proxyImage.setSrc('./product.png');