前言

代理模式简而言之就是自己要做的事情交给别人来做,比如说在跨域处理中我们大都是通过代理来处理跨域问题。在实际vue项目开发中,我们本地开发的域名和服务器通常不是在同一个域名下,那么这时候我们都会在vue下配置一个代理服务器,也就是在devserve设置一个proxy来进行接口代理访问

代理模式实现

在es6中,提出了关键词proxy,甚至vue3.0基本思想也是通过proxy来实现的,那么我们就来看一下如何通过proxy来实现代理模式

  1. // 明星
  2. let star = {
  3. name: '张XX',
  4. age: 25,
  5. phone: '13910733521'
  6. }
  7. // 经纪人
  8. let agent = new Proxy(star, {
  9. get: function (target, key) {
  10. if (key === 'phone') {
  11. // 返回经纪人自己的手机号
  12. return '18611112222'
  13. }
  14. if (key === 'price') {
  15. // 明星不报价,经纪人报价
  16. return 120000
  17. }
  18. return target[key]
  19. },
  20. set: function (target, key, val) {
  21. if (key === 'customPrice') {
  22. if (val < 100000) {
  23. // 最低 10w
  24. throw new Error('价格太低')
  25. } else {
  26. target[key] = val
  27. return true
  28. }
  29. }
  30. }
  31. })
  32. // 主办方
  33. console.log(agent.name)
  34. console.log(agent.age)
  35. console.log(agent.phone)
  36. console.log(agent.price)
  37. // 想自己提供报价(砍价,或者高价争抢)
  38. agent.customPrice = 150000
  39. // agent.customPrice = 90000 // 报错:价格太低
  40. console.log('customPrice', agent.customPrice)

其实很简单,就是说我们操纵对象具体使用方法会被proxy拦截到,交由proxy第二个参数对象handler来执行,于是便实现了代理模式。