欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2020年04月18日 11:56:41   作者:qdmoment  
這篇文章主要介紹了原生js實現(xiàn)的觀察者和訂閱者模式,結(jié)合簡單實例形式分析了js觀察者和訂閱者模式的相關(guān)原理與實現(xiàn)技巧,需要的朋友可以參考下

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

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

在傳統(tǒng)的前端解耦方面,觀察者模式作為比較常見一種設(shè)計模式,大量使用在各種框架類庫的設(shè)計當(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;

使用:引入全局事件類,或通過配置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>
 }
}

參考:淘寶前端團隊技術(shù)庫

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

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

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

相關(guān)文章

  • 前端構(gòu)建工具之gulp的配置與搭建詳解

    前端構(gòu)建工具之gulp的配置與搭建詳解

    gulpjs是一個前端構(gòu)建工具,與gruntjs相比,gulpjs無需寫一大堆繁雜的配置參數(shù),API也非常簡單,學(xué)習(xí)起來很容易,下面這篇文章主要給大家介紹了關(guān)于前端構(gòu)建工具之gulp的配置與搭建的相關(guān)資料,需要的朋友可以參考下。
    2017-06-06
  • pdfmake生成pdf的使用方法

    pdfmake生成pdf的使用方法

    本文介紹了如何使用pdfmake第三方庫在項目中根據(jù)模板生成PDF文件,文中還提到了常用的配置,如頁眉和頁腳效果,對pdfmake pdf使用方法感興趣的朋友一起看看吧
    2024-09-09
  • javascript數(shù)組元素刪除方法delete和splice解析

    javascript數(shù)組元素刪除方法delete和splice解析

    這篇文章主要介紹了javascaipt數(shù)組元素刪除方法delete和splice解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • 解決循環(huán)中setTimeout執(zhí)行順序的問題

    解決循環(huán)中setTimeout執(zhí)行順序的問題

    今天小編就為大家分享一篇解決循環(huán)中setTimeout執(zhí)行順序的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • JS二級菜單不同實現(xiàn)方法分析【4種方法】

    JS二級菜單不同實現(xiàn)方法分析【4種方法】

    這篇文章主要介紹了JS二級菜單不同實現(xiàn)方法,結(jié)合實例形式分析了4種不同的二級下拉菜單實現(xiàn)方法,需要的朋友可以參考下
    2018-12-12
  • 利用Javascript實現(xiàn)BMI計算器

    利用Javascript實現(xiàn)BMI計算器

    BMI指數(shù)計算器相信大家都用過,那用JavaScript怎么實現(xiàn)呢?其實很簡單,這篇文章給出了實例代碼,有需要的可以參考學(xué)習(xí)。
    2016-08-08
  • 微信小程序?qū)崿F(xiàn)文章關(guān)注功能詳細(xì)流程

    微信小程序?qū)崿F(xiàn)文章關(guān)注功能詳細(xì)流程

    在社交小程序里有個常見的場景是關(guān)注功能,我們本篇以關(guān)注已經(jīng)發(fā)布的文章為例,講解一下關(guān)注功能如何實現(xiàn)
    2022-08-08
  • JS中跳出循環(huán)的示例代碼

    JS中跳出循環(huán)的示例代碼

    for循環(huán)中我們使用continue;終止本次循環(huán)計入下一個循環(huán),使用break終止整個循環(huán)。下面小編通過本文給大家分享JS中跳出循環(huán)的示例代碼,需要的朋友參考下吧
    2017-09-09
  • js獲取圖片寬高的方法

    js獲取圖片寬高的方法

    這篇文章主要介紹了js獲取圖片寬高的方法,快速獲取圖片的寬高其實是為了預(yù)先做好排版樣式布局做準(zhǔn)備,需要的朋友可以參考下
    2015-11-11
  • 關(guān)于this和self的使用說明

    關(guān)于this和self的使用說明

    剛接觸python的時候,最不習(xí)慣的事情,就是每個方法都要加一個self。無論Javascript還是C#,都直接一個this搞定,干嘛非要加一個變量self。
    2010-08-08

最新評論