国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

原生js實(shí)現(xiàn)的觀察者和訂閱者模式簡(jiǎn)單示例

瀏覽:70日期:2024-05-12 15:49:39

本文實(shí)例講述了原生js實(shí)現(xiàn)的觀察者和訂閱者模式。分享給大家供大家參考,具體如下:

觀察者模式也叫 發(fā)布者-訂閱者模式,發(fā)布者發(fā)布事件,訂閱者監(jiān)聽事件并做出反應(yīng)

在傳統(tǒng)的前端解耦方面,觀察者模式作為比較常見一種設(shè)計(jì)模式,大量使用在各種框架類庫(kù)的設(shè)計(jì)當(dāng)中。

核心代碼:

// eventProxy.js’use strict’;const eventProxy = { onObj: {}, oneObj: {}, on: function(key, fn) { if(this.onObj[key] === undefined) { this.onObj[key] = []; } this.onObj[key].push(fn); }, one: function(key, fn) { if(this.oneObj[key] === undefined) { this.oneObj[key] = []; } this.oneObj[key].push(fn); }, off: function(key) { this.onObj[key] = []; this.oneObj[key] = []; }, trigger: function() { let key, args; if(arguments.length == 0) { return false; } key = arguments[0]; args = [].concat(Array.prototype.slice.call(arguments, 1)); if(this.onObj[key] !== undefined && this.onObj[key].length > 0) { for(let i in this.onObj[key]) { this.onObj[key][i].apply(null, args); } } if(this.oneObj[key] !== undefined && this.oneObj[key].length > 0) { for(let i in this.oneObj[key]) { this.oneObj[key][i].apply(null, args); this.oneObj[key][i] = undefined; } this.oneObj[key] = []; } }}; export default eventProxy;

使用:引入全局事件類,或通過(guò)配置webpack將事件類設(shè)置為全局變量

import { eventProxy } from ’@/utils’ class Parent extends Component{ render() { return ( <div style={{marginTop:'50px'}}> <Child_1/> <Child_2/> </div> ); }}// componentDidUpdate 與 render 方法與上例一致class Child_1 extends Component{ componentDidMount() { setTimeout(() => { // 發(fā)布 msg 事件 console.log(eventProxy) eventProxy.trigger(’msg’, ’end’,’lll’); }, 5000); } render() { return ( <div>我是組件一</div> ) }}// componentDidUpdate 方法與上例一致class Child_2 extends Component{ state = { msg: ’start’ }; componentDidMount() { // 監(jiān)聽 msg 事件 eventProxy.on(’msg’, (msg,mm) => { console.log(msg,mm) this.setState({ msg:msg }); }); } render() { return <div> <p>child_2 component: {this.state.msg}</p> </div> }}

參考:淘寶前端團(tuán)隊(duì)技術(shù)庫(kù)

感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。

更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 国产三级香港在线观看 | 伊人久久青草青青综合 | tom影院亚洲国产 | 欧美高清在线精品一区二区不卡 | 亚洲加勒比 | 中文字幕在线乱码不卡区区 | 香港经典毛片a免费观看 | 日本色哟哟| 美女一丝不佳一级毛片香蕉 | 在线视频欧美日韩 | 亚洲加勒比在线 | 日韩欧国产精品一区综合无码 | 草草影院www色欧美极品 | 国产午夜精品免费一二区 | 在线一区免费视频播放 | 9久re在线观看视频精品 | 波多野结衣在线观看一区二区三区 | 亚洲 自拍 另类 欧美 综合 | 亚洲影院手机版777点击进入影院 | 久久久久久a亚洲欧洲aⅴ | 精品国产三级a | 69国产成人综合久久精品91 | a一级 | 欧美一区二区三区在线观看免费 | 色香欲综合成人免费视频 | 久久久久久亚洲精品影院 | 精品91| 国内精品免费一区二区观看 | 成人毛片免费观看视频在线 | 欧美亚洲一区二区三区 | 国产素人在线观看 | 日本激情视频在线观看 | 国产性色 | 亚洲一级片免费看 | 欧洲成人全免费视频网站 | 色老头一级毛片 | 永久免费不卡在线观看黄网站 | 午夜影院啪啪 | 免费观看欧美成人禁片 | 欧美一级毛片高清毛片 | 国产自一区 |