疑问
设计模式在前端中的具体体现?一直以来都觉得设计模式在前端中的体现非常的主观模糊、难以运用。
- 答:实际的应用和我所理解的应该差不多,文中提到的代理模式有点意思在特定场景也许有用。设计模式的体现还是在第三方工具库中会更明显。业务代码中没必要强行引入这个概念,加重开发负担、降低可读性、关键只有一个人会用。
摘要&心得
更多详见前端与设计模式
- 答:实际的应用和我所理解的应该差不多,文中提到的代理模式有点意思在特定场景也许有用。设计模式的体现还是在第三方工具库中会更明显。业务代码中没必要强行引入这个概念,加重开发负担、降低可读性、关键只有一个人会用。
代理模式
- 根据调用频率来进行截流的函数代理
- 针对计算成本比较高的函数,我们可以通过对函数进行代理,来缓存函数对应参数的计算返回结果。
const getCacheProxy = (fn, cache = new Map()) =>
// 代理函数 fn
new Proxy(fn, {
// 代理 fn 的调用方法
apply(target, context, args) {
// 将调用参数字符串化,方便作为存储 key
const argsString = args.join(' ')
// 判断是否存在缓存,如果存在直接返回缓存值
if (cache.has(argsString)) {
return cache.get(argsString)
}
// 执行 fn 方法,得到计算结果
const result = fn(...args)
// 存储相关计算结果
cache.set(argsString, result)
return result
}
})
装饰者模式
- 在不改变原对象的基础上,对其对象进行包装和拓展,使原对象能够应对更加复杂的需求。
- 这有点像高阶函数(有点像?就用的很微妙,所以还是很主观的)