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

js簡(jiǎn)單粗暴的發(fā)布訂閱示例代碼

 更新時(shí)間:2021年01月23日 12:50:37   作者:威威威威vvvv  
這篇文章主要給大家介紹了js簡(jiǎn)單粗暴的發(fā)布訂閱的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

什么是發(fā)布/訂閱?

我打個(gè)比方,你去某個(gè)門店買衣服,你和門店店長(zhǎng)相互并不認(rèn)識(shí),門店店長(zhǎng)只管賣他的衣服,并不關(guān)心是誰來買,而你也只管買你想要的衣服,并不關(guān)心是哪個(gè)門店在賣,這時(shí),門店和你就組成了一個(gè)發(fā)布/訂閱的關(guān)系。

當(dāng)門店掛出衣服款式,你去找你想要的衣服,如果找到了,那就買下來,如果沒找到,那就離開這家店。整個(gè)過程就是這么簡(jiǎn)單。

使用場(chǎng)景

異步通信、多頁(yè)面間相互通信,pageA 的方法想在 pageB的方法調(diào)用的某個(gè)時(shí)機(jī)觸發(fā)

直接上代碼

class Publish {
 constructor() {
  this.listMap = {};
 }
	// 訂閱
 on(key, fn) {
  this.listMap[key]
   ? this.listMap[key].push(fn)
   : this.listMap[key] = [fn];
   
		// 存儲(chǔ)訂閱fn的下標(biāo)
  const index = this.listMap[key].length - 1;
  
		// 返回取消訂閱的function
  return () => this.clear(key, index);
 }
 
	// 取消所有該key訂閱
 off(key) {
  delete this.listMap[key];
 }
 
	// 取消key的指定的某個(gè)訂閱
 clear(key, index) {
  index === this.listMap[key].length - 1
   ? this.listMap[key].pop()
   : this.listMap[key][index] = null;
 }
 
	//訂閱一次觸發(fā)后自動(dòng)取消訂閱
 once(key, fn) {
  this.on(key, (...rest) => {
   fn(...rest);
   this.off(key);
  });
 }

	// 發(fā)布key
 trigger(key, ...rest) {
 	if(key in this.listMap) {
	 	this.listMap[key].forEach(fn => {
	   fn(...rest);
	  });
 	}
 }
}

使用方法

const ob = new Publish();

// 訂閱 sub1
const sub1 = ob.on('sub1', (a, b) => {
 console.log('sub1', a, b);
});

// 訂閱 sub1
const sub11 = ob.on('sub1', (a, b) => {
 console.log('sub11', a, b);
});

ob.trigger('sub1', 2, 3);

// 取消訂閱sub1
sub1();

// 取消訂閱sub11
sub11();

// 訂閱 sub3
ob.on('sub3', (a, b) => {
 console.log('sub3', a, b);
});

// 訂閱 sub3
ob.on('sub3', (a, b) => {
 console.log('sub33', a, b);
});

ob.trigger('sub3', 6, 7);

// 取消訂閱所有的sub3
ob.off('sub3');

// 訂閱一次就自行取消訂閱
ob.once('sub4', (a, b) => {
 console.log('sub4', a, b);
});

ob.trigger('sub4', 8, 9);

總結(jié)

到此這篇關(guān)于js簡(jiǎn)單粗暴的發(fā)布訂閱的文章就介紹到這了,更多相關(guān)js簡(jiǎn)單發(fā)布訂閱內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js全選按鈕的實(shí)現(xiàn)方法

    js全選按鈕的實(shí)現(xiàn)方法

    在我們進(jìn)行項(xiàng)目選擇時(shí),會(huì)出現(xiàn)選擇多個(gè)項(xiàng)目或者是項(xiàng)目實(shí)現(xiàn)全選,這樣的功能如何實(shí)現(xiàn)吶,本文給出了js實(shí)現(xiàn)checkbox全選的詳細(xì)代碼,希望大家喜歡。
    2015-11-11
  • 微信小程序使用slider實(shí)現(xiàn)音頻進(jìn)度條

    微信小程序使用slider實(shí)現(xiàn)音頻進(jìn)度條

    這篇文章主要為大家詳細(xì)介紹了微信小程序使用slider實(shí)現(xiàn)音頻進(jìn)度條,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • javascript引用對(duì)象的方法代碼

    javascript引用對(duì)象的方法代碼

    javascript引用對(duì)象的方法代碼...
    2007-08-08
  • JSP基于Bootstrap分頁(yè)顯示實(shí)例解析

    JSP基于Bootstrap分頁(yè)顯示實(shí)例解析

    這篇文章主要為大家詳細(xì)介紹了JSP基于Bootstrap分頁(yè)顯示實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • javascript實(shí)現(xiàn)小型區(qū)塊鏈功能

    javascript實(shí)現(xiàn)小型區(qū)塊鏈功能

    這篇文章主要介紹了javascript實(shí)現(xiàn)小型區(qū)塊鏈功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 最短的javascript:地址欄載入腳本代碼

    最短的javascript:地址欄載入腳本代碼

    相信大家都在地址欄里用javascript:的形式執(zhí)行過腳本。這種方法簡(jiǎn)單實(shí)用,測(cè)試比較短的腳本時(shí)經(jīng)常用到
    2011-10-10
  • JavaScript+html5 canvas制作色彩斑斕的正方形效果

    JavaScript+html5 canvas制作色彩斑斕的正方形效果

    這篇文章主要介紹了JavaScript+html5 canvas制作色彩斑斕的正方形效果,實(shí)例分析了JavaScript結(jié)合html5 canvas實(shí)現(xiàn)圖形動(dòng)態(tài)繪制的技巧,需要的朋友可以參考下
    2016-01-01
  • JavaScript 開發(fā)工具webstrom使用指南

    JavaScript 開發(fā)工具webstrom使用指南

    本文給大家推薦了一款非常熱門的javascript開發(fā)工具webstrom,著重介紹了webstrom的特色功能、設(shè)置技巧、使用心得以及快捷鍵匯總,非常的全面。
    2014-12-12
  • 一步快速解決微信小程序中textarea層級(jí)太高遮擋其他組件

    一步快速解決微信小程序中textarea層級(jí)太高遮擋其他組件

    這篇文章主要給大家介紹了關(guān)于如何通過一步快速解決微信小程序中textarea層級(jí)太高遮擋其他組件問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • JS獲取下拉列表所選中的TEXT和Value的實(shí)現(xiàn)代碼

    JS獲取下拉列表所選中的TEXT和Value的實(shí)現(xiàn)代碼

    本篇文章主要是對(duì)JS獲取下拉列表所選中的TEXT和Value的實(shí)現(xiàn)代碼進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-01-01

最新評(píng)論