代理模式;

疑问

  • 设计模式在前端中的具体体现?一直以来都觉得设计模式在前端中的体现非常的主观模糊、难以运用。

    • 答:实际的应用和我所理解的应该差不多,文中提到的代理模式有点意思在特定场景也许有用。设计模式的体现还是在第三方工具库中会更明显。业务代码中没必要强行引入这个概念,加重开发负担、降低可读性、关键只有一个人会用。

      摘要&心得

      更多详见前端与设计模式
  • 代理模式

    • 根据调用频率来进行截流的函数代理
    • 针对计算成本比较高的函数,我们可以通过对函数进行代理,来缓存函数对应参数的计算返回结果。
      1. const getCacheProxy = (fn, cache = new Map()) =>
      2. // 代理函数 fn
      3. new Proxy(fn, {
      4. // 代理 fn 的调用方法
      5. apply(target, context, args) {
      6. // 将调用参数字符串化,方便作为存储 key
      7. const argsString = args.join(' ')
      8. // 判断是否存在缓存,如果存在直接返回缓存值
      9. if (cache.has(argsString)) {
      10. return cache.get(argsString)
      11. }
      12. // 执行 fn 方法,得到计算结果
      13. const result = fn(...args)
      14. // 存储相关计算结果
      15. cache.set(argsString, result)
      16. return result
      17. }
      18. })
  • 装饰者模式

    • 在不改变原对象的基础上,对其对象进行包装和拓展,使原对象能够应对更加复杂的需求。
    • 这有点像高阶函数(有点像?就用的很微妙,所以还是很主观的)