千家信息网

js发布的订阅模式的作用有哪些

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章将为大家详细讲解有关js发布的订阅模式的作用有哪些,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、发布订阅模式可以广泛应用于异步编程,这是一
千家信息网最后更新 2025年01月18日js发布的订阅模式的作用有哪些

这篇文章将为大家详细讲解有关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 todaypaper.daily();      // Just read big news todaypaper.monthly();    // About to fall asleep reading this interesting analysispaper.monthly();    // About to fall asleep reading this interesting analysispaper.monthly();    // About to fall asleep reading this interesting analysis

关于js发布的订阅模式的作用有哪些就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

0