惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
雷峰网
雷峰网
S
SegmentFault 最新的问题
博客园 - 【当耐特】
博客园_首页
量子位
爱范儿
爱范儿
博客园 - 叶小钗
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
V
V2EX
美团技术团队
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
博客园 - 聂微东
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog
宝玉的分享
宝玉的分享
WordPress大学
WordPress大学
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻

博客园 - 如是如是

将博客搬至CSDN 钱钟书夫人杨绛:《一百岁感言》 用到了反射,还不错。可以取到动态创建类的值 JounceTabRegion Jounce Blendable RestShart Post 方式传递poco给Web api Using ASP.NET Web API with ASP.NET Web Forms How to Migrate from WCF Web API to ASP.NET Web API ASP.NET Web API MVC-REST-SilverLight 之 架构 MVC-REST-SilverLight 之 RestExample.Model.Silverlight\Customer.cs - 如是如是 MVC-REST-SilverLight 之MainPage.xaml.cs MVC-REST-SilverLight 之 ViewModels\MainViewModel.cs - 如是如是 MVC-REST-SilverLight 之Api\CustomerApi.cs - 如是如是 - 博客园 MVC-REST-SilverLight 之 Global.asax.cs MVC-REST-SilverLight 之 HttpConfiguration MVC-REST-SilverLight 之 MapServiceRoute MEF Export 和 Import 委托 设计模式-访问者
DOM无关事件
如是如是 · 2013-03-12 · via 博客园 - 如是如是

C#中,事件和委托是模块解耦的手段。在javascript中呢?

一个采用发布/订阅模式实现事件驱动的库。

发布/订阅模式是一种消息模式,

参与着:发布者、订阅者。

var PubSub={

    subscribe:function(ev,callback){

        //创建 _callback 对象,除非她已经存在

        var call=this._callback||(this._callback={});

        //针对给定的事件Key创建一个数组,除非这个数组已经存在

        //然后将回调函数追加到这个数组中

        (this._callback[ev]||(this._callback[ev]=[])).push(callback);

        returnthis;

    },

    publish:function(){

        //arguments对象转换为真正的数组

        var args=Array.prototype.slice.call(arguments,0);

        //拿出第1个参数,即事件的名称

        var ev=args.shift();

        //如果不存在 _callback对象,则返回

        //或者如果不包含给定事件对应的数组

        var list,calls,i,l;

        if(!(calls=this._callback)) returnthis;

        if(!(list=this._callback[ev])) returnthis;

        //触发回调

        for(i=o,l=list.length;i<l;i++)

            list[i].apply(this,args);

        returnthis;

    }

};

//使用方法,事件名称可以采用命名空间的方式来管理,例如使用冒号(:)分隔符

PubSub.subscribe("user:create",function(){/* ... */});

PubSub.publish("user:create");

//这时候PubSub是全局变量,可以应用于全局事件。我们也可以很容易的将其应用于局部事件。

//如下

var Asset={};

//添加PubSub

jQuery.extend(Asset,PubSub);

//现在就可以用publish/subcribe函数了

Asset.subscribe("create",function(){/* ... */});