91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

js發布的訂閱模式的作用有哪些

發布時間:2021-10-09 13:58:10 來源:億速云 閱讀:295 作者:柒染 欄目:編程語言

這篇文章將為大家詳細講解有關js發布的訂閱模式的作用有哪些,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

1、發布訂閱模式可以廣泛應用于異步編程,這是一種取代回調函數的方案。

2、發布訂閱模式可以取代對象之間硬編碼的通知機制,一個對象不再需要明確調用另一個對象的接口。

實例

// 由于這些成員對于任何發布者對象都是通用的,故將它們作為獨立對象的一個部分來實現是很有意義的。那樣我們可將其復制到任何對象中,并將任意給定對象變成一個發布者。
// 如下實現一個通用發布者,定義發布者對象……
let publisher = {
  subscribers: {
    any: []
  },
  subscribe: function (fn, type = `any`) {
    if (typeof this.subscribers[type] === `undefined`) {
      this.subscribers[type] = [];
    }
    this.subscribers[type].push(fn);
  },
  unSubscribe: function (fn, type = `any`) {
    let newSubscribers = [];
    this.subscribers[type].forEach((item, i) => {
      if (item !== fn) {
        newSubscribers.push(fn);
      }
    });
    this.subscribers[type] = newSubscribers;
  },
  publish: function (args, type = `any`) {
    this.subscribers[type].forEach((item, i) => {
      item(args);
    });
  }
};
 
// 定義一個函數makePublisher(),它接受一個對象作為參數,通過把上述通用發布者的方法復制到該對象中,從而將其轉換為一個發布者
function makePublisher(obj) {
  for (let i in publisher) {
    if (publisher.hasOwnProperty(i) && typeof publisher[i] === `function`) {
      obj[i] = publisher[i];
    }
  }
  obj.subscribers = { any: [] };
}
 
// 實現paper對象
var paper = {
  daily: function () {
    this.publish(`big news today!`);
  },
  monthly: function () {
    this.publish(`interesting analysis`, `monthly`);
  }
};
 
// 將paper構造成一個發布者
makePublisher(paper);
 
// 看看訂閱對象joe,該對象有兩個方法:
var joe = {
  drinkCoffee: function (paper) {
    console.log(`Just read ` + paper);
  },
  sundayPreNap: function (monthly) {
    console.log(`About to fall asleep reading this ` + monthly);
  }
};
 
// paper注冊joe(即joe向paper訂閱)
paper.subscribe(joe.drinkCoffee);
paper.subscribe(joe.sundayPreNap, `monthly`);
 
// 即joe為默認“any”事件提供了一個可被調用的方法,而另一個可被調用的方法則用于當“monthly”類型的事件發生時的情況。現在讓我們來觸發一些事件:
paper.daily();      // Just read big news today
paper.daily();      // Just read big news today
paper.monthly();    // About to fall asleep reading this interesting analysis
paper.monthly();    // About to fall asleep reading this interesting analysis
paper.monthly();    // About to fall asleep reading this interesting analysis

關于js發布的訂閱模式的作用有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

js
AI

融水| 晋州市| 黄大仙区| 五峰| 黑水县| 电白县| 卓资县| 抚宁县| 醴陵市| 共和县| 五大连池市| 大港区| 广丰县| 三台县| 筠连县| 迭部县| 乌鲁木齐县| 衡南县| 南安市| 无棣县| 建始县| 滨州市| 资溪县| 正镶白旗| 临猗县| 庄浪县| 德格县| 隆回县| 同江市| 嘉黎县| 济宁市| 南安市| 麻栗坡县| 兴和县| 蒙山县| 唐海县| 怀集县| 尖扎县| 买车| 阜城县| 商丘市|