成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

js發(fā)布的訂閱模式的作用有哪些

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

成都創(chuàng)新互聯(lián)公司是專業(yè)的椒江網(wǎng)站建設公司,椒江接單;提供成都做網(wǎng)站、網(wǎng)站建設,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行椒江網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

1、發(fā)布訂閱模式可以廣泛應用于異步編程,這是一種取代回調(diào)函數(shù)的方案。

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

實例

// 由于這些成員對于任何發(fā)布者對象都是通用的,故將它們作為獨立對象的一個部分來實現(xiàn)是很有意義的。那樣我們可將其復制到任何對象中,并將任意給定對象變成一個發(fā)布者。
// 如下實現(xiàn)一個通用發(fā)布者,定義發(fā)布者對象……
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);
    });
  }
};
 
// 定義一個函數(shù)makePublisher(),它接受一個對象作為參數(shù),通過把上述通用發(fā)布者的方法復制到該對象中,從而將其轉(zhuǎn)換為一個發(fā)布者
function makePublisher(obj) {
  for (let i in publisher) {
    if (publisher.hasOwnProperty(i) && typeof publisher[i] === `function`) {
      obj[i] = publisher[i];
    }
  }
  obj.subscribers = { any: [] };
}
 
// 實現(xiàn)paper對象
var paper = {
  daily: function () {
    this.publish(`big news today!`);
  },
  monthly: function () {
    this.publish(`interesting analysis`, `monthly`);
  }
};
 
// 將paper構造成一個發(fā)布者
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”事件提供了一個可被調(diào)用的方法,而另一個可被調(diào)用的方法則用于當“monthly”類型的事件發(fā)生時的情況?,F(xiàn)在讓我們來觸發(fā)一些事件:
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發(fā)布的訂閱模式的作用有哪些就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

分享名稱:js發(fā)布的訂閱模式的作用有哪些
網(wǎng)站地址:http://jinyejixie.com/article0/ghopio.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供電子商務服務器托管、面包屑導航、軟件開發(fā)、網(wǎng)頁設計公司、品牌網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設
青川县| 留坝县| 漳州市| 大石桥市| 巴楚县| 托克逊县| 集贤县| 桃园县| 江孜县| 宁阳县| 白朗县| 明光市| 哈巴河县| 天等县| 敦化市| 冀州市| 岳阳市| 陆良县| 奈曼旗| 泗阳县| 于都县| 沾益县| 祁连县| 罗平县| 合江县| 汉川市| 洪江市| 大石桥市| 芜湖县| 同江市| 肃北| 忻州市| 西和县| 梁山县| 阳原县| 桂平市| 彭山县| 佳木斯市| 南宫市| 鹤山市| 潼关县|