长治网站制作小程序,企业网站网站建设电话,手机网站返回跳转,200平米火锅店装修费用设计模式 代码整体的结构会更加清楚#xff0c;管理起来会更加方便#xff0c;更好地维护 设计模式是一种思想 发布订阅 模块化开发 导入很多模块 容器即数组存储未来要执行的方法#xff0c;同addEventListener 数组塌陷问题* 由于删除了元素#xff0c;导致从删除元素的位… 设计模式 代码整体的结构会更加清楚管理起来会更加方便更好地维护 设计模式是一种思想 发布订阅 模块化开发 导入很多模块 容器即数组存储未来要执行的方法同addEventListener 数组塌陷问题* 由于删除了元素导致从删除元素的位置开始之后的每一项索引向前递进的问题。 如果还像开始一样索引递增1那么就会产生某些元素被跳过的现象 (function (){let listeners{}function checkName(name){if(typeof name ! string) throw new Error(name must be a string!)}function checkFunc(func){if(typeof func ! function) throw new Error(callback must be a function!)}const onfunction (name,func){checkName(name)checkFunc(func)if(!listeners.hasOwnProperty(name)) listeners[name][]let pondlisteners[name]if(!pond.includes(func)){pond.push(func)} }const offfunction (name,func){checkName(name)checkFunc(func)if(!listeners.hasOwnProperty(name)) return;let pondlisteners[name]let indexpond.indexOf(func)if(index-1){pond[index]null;}}const emitfunction (name,...args){checkName(name)let pondlisteners[name]if(!pond) return;for(let i0;ilet fnpond[i]if(typeof fn ! function){pond.splice(i,1)i--;continue;}// fn执行fn(...args) } }window.$subscribe{on,off,emit} })()const fn1function (){console.log(fn1);}const fn2function (){console.log(fn2);$subscribe.off(success,fn1)$subscribe.off(success,fn2)}const fn3function (){console.log(fn3);}const fn4function (){console.log(fn4);}$subscribe.on(success,fn1)$subscribe.on(success,fn2)$subscribe.on(success,fn3)$subscribe.on(success,fn4)$subscribe.emit(success)OOP设计模式 函数式编程不能中止中间不能结束也不能控制循环的步骤 发布订阅设计思想 vue中父子组件$emit/$on通信react中redux中公共状态改变通知各个组件执行好几个地方加入一些方法某个阶段把它们统一执行而加入的方法并没有在同一个js中这个时候就使用发布订阅。 观察者模式 两个对象观察者和目标 目标订阅一些方法和通知方法执行 观察者update每个观察者执行update 把之前函数观察者往事件池中加的是观察者每个观察者都有一个结构 区别 加入的是观察者而不是一个函数。而通知也是通知observer.update执行。 核心思路 都有个容器把要呼叫的东西放进去到达时间以后通知执行。 先放个容器把所有东西订阅进去或移除订阅以后再通知执行fire/notify。 发布订阅是加方法观察者是加观察者实例。发布订阅是直接通知方法而观察者是通知观察者实例执行update。