4.js模式-发布-订阅模式

1. 发布-订阅模式

var observe = (function(){

      var events = {},

             listen,

             trigger,

             remmove;

     

      listen = function(key,fn){

             if(!events[key]){

                    events[key] = [];

             }

            

             events[key].push(fn);

      };

     

      trigger = function(){

             var key = Array.prototype.shift.call(arguments);

             var fns = events[key];

             if(!fns || fns.length === 0){

                    return false;

             }

            

             for(var i=0,fn;fn=fns[i++];){

                    fn.apply(this,arguments);

             }

      };

     

      remove = function(key,fn){

             var fns = events[key];

             if(!fns){

                    return false;

             }

             if(!fn){

                    fns && (fns.length=0);

             }else{

                    for(var l =fns.length -1;l>=0;l--){

                           var _fn = fns[l];

                           if(_fn===fn){

                                  fns.splice(l,1);

                           }

                    }

             }

      };

     

      return {

             listen:listen,

             trigger:trigger,

             remove:remove

      }

})();

 

  • observe.listen('xx',function(price){

      console.log(price);

});

 

observe.trigger('xx',2000);

posted @   S&L·chuck  阅读(256)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示