加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

JavaScript 的一些常用设计模式

发布时间:2019-08-20 01:04:03 所属栏目:建站 来源:xianshannan
导读:计划模式是前人办理某个特定场景下对而总结出来的一些办理方案。也许刚开始打仗编程还没有什么履历的时辰,会感受计划模式没那么好领略,这个也很正常。有些简朴的计划模式我们偶然辰用到,不外没意识到也是存在的。 进修计划模式,可以让我们在处理赏罚题目的

原先有个成果是实现字符串反转(reverseString),那么在不改变 reverseString 的现有逻辑,我们可以行使缓存署理模式实现机能的优化,虽然也可以在值改变的时辰行止理赏罚下其他逻辑,如 Vue computed 的用法。

  1. function reverseString(str) { 
  2.   return str 
  3.     .split('') 
  4.     .reverse() 
  5.     .join('') 
  6. const reverseStringProxy = (function() { 
  7.   const cached = {} 
  8.   return function(str) { 
  9.     if (cached[str]) { 
  10.       return cached[str] 
  11.     } 
  12.     cached[str] = reverseString(str) 
  13.     return cached[str] 
  14.   } 
  15. })() 

订阅宣布模式

订阅宣布使前端常用的数据通讯方法、异步逻辑处理赏罚等等,如 React setState 和 Redux 就是订阅宣布模式的。

可是要公道的行使订阅宣布模式,不然会造成数据紊乱,redux 的单向数据流头脑可以停止数据流紊乱的题目。

例子

  1. class Event { 
  2.   constructor() { 
  3.     // 全部 eventType 监听器回调函数(数组) 
  4.     this.listeners = {} 
  5.   } 
  6.   /** 
  7.    * 订阅变乱 
  8.    * @param {String} eventType 变乱范例 
  9.    * @param {Function} listener 订阅后宣布举措触发的回调函数,参数为宣布的数据 
  10.    */ 
  11.   on(eventType, listener) { 
  12.     if (!this.listeners[eventType]) { 
  13.       this.listeners[eventType] = [] 
  14.     } 
  15.     this.listeners[eventType].push(listener) 
  16.   } 
  17.   /** 
  18.    * 宣布变乱 
  19.    * @param {String} eventType 变乱范例 
  20.    * @param {Any} data 宣布的内容 
  21.    */ 
  22.   emit(eventType, data) { 
  23.     const callbacks = this.listeners[eventType] 
  24.     if (callbacks) { 
  25.       callbacks.forEach((c) => { 
  26.         c(data) 
  27.       }) 
  28.     } 
  29.   } 
  30.  
  31. const event = new Event() 
  32. event.on('open', (data) => { 
  33.   console.log(data) 
  34. }) 
  35. event.emit('open', { open: true }) 

调查者模式

调查者模式界说了一种一对多的依靠相关,让多个调查者工具同时监听某一个方针工具,当这个方针工具的状态产生变革时,会关照全部调查者工具,使它们可以或许自动更新。

Vue 的数据驱动就是行使调查者模式,mbox 也是行使调查者模式。

例子

仿照 Vue 数据驱动渲染模式(只是相同,简朴的仿照)。

起首行使 setter 和 getter 监听到数据的变革:

  1. const obj = { 
  2.   data: { description: '' }, 
  3.  
  4. Object.defineProperty(obj, 'description', { 
  5.   get() { 
  6.     return this.data.description 
  7.   }, 
  8.   set(val) { 
  9.     this.data.description = val 
  10.   }, 
  11. }) 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读