系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > 网络编程 > JavaScript > 详细页面

js实现的订阅发布者模式简单示例

时间:2020-03-14来源:电脑系统城作者:电脑系统城

本文实例讲述了js实现的订阅发布者模式.分享给大家供大家参考,具体如下:


 
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <script>
  11. var pubsub = (function(){
  12. var q = {}
  13. topics = {},
  14. subUid = -1;
  15. //发布消息
  16. q.publish = function(topic, args) {
  17. //判断有没有当前的话题
  18. if(!topics[topic]) {return;}
  19. var subs = topics[topic],//当前话题订阅者数组
  20. len = subs.length;
  21. while(len--) {
  22. subs[len].func(topic, args);
  23. }
  24. return this;
  25. };
  26. //订阅事件
  27. //接收两个参数 要订阅的话题,处理程序
  28. q.subscribe = function(topic, func) {
  29. //如果当前话题已经有订阅者,获取到订阅者数组
  30. //一个话题名下的 订阅者事件可以是多个fn1, fn2, fn3
  31. topics[topic] = topics[topic] ? topics[topic] : [];
  32.  
  33. //给每个订阅者添加唯一的token
  34. var token = (++subUid).toString();
  35. topics[topic].push({
  36. token : token,
  37. func : func
  38. });
  39. return token;
  40. };
  41. //取消订阅
  42. q.unsubscribe = function(token){
  43. Object.keys(topics).map( key => {
  44. topics[key].map((fn, fnIndex) => {
  45. if(fn.token == token){
  46. topics[key].splice(fnIndex,1)
  47. }
  48. })
  49. })
  50. }
  51. return q;
  52. })();
  53. //触发的事件(订阅者的处理程序)
  54. var logmsg1 = function(topics, data) {
  55. console.log("logging1:" + topics + ":" + data);
  56. }
  57.  
  58. var logmsg2 = function(topic, data) {
  59.  
  60. console.log("logging2:" + topic + ":" + data,'我是订阅者2');
  61. }
  62. //监听指定的消息'msgName'
  63. var sub1 = pubsub.subscribe('msgName', logmsg1);
  64. var sub2 = pubsub.subscribe('msgName', logmsg2);
  65. //pubsub.unsubscribe(sub1)
  66. //发布消息'msgName'
  67. pubsub.publish('msgName', 'hello world');
  68. //发布无人监听的消息'msgName1'
  69. pubsub.publish('anotherMsgName', 'me too!');
  70. </script>
  71. </body>
  72. </html>
  73.  

运行结果:

js实现的订阅发布者模式简单示例更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载