代码改变世界

每周优秀代码赏析系列【二】----Jif

  【当耐特】  阅读(3432)  评论(3编辑  收藏  举报

一.简介

Jif是一个轻量级的events,Jif提供了事件监听on、发送send和清空clear接口,我们可以为其扩展remove 等接口。

Jif也是观察者模式的一种优雅实现。

 

二.代码公布

下面就公布本周的优秀代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
var Jif = function () {
    this._listeners = {};
};
 
Jif.prototype = (function (undefined) {
    return {
        on: function (event, callback) {
            if (this._listeners[event] === undefined) {
                this._listeners[event] = [];
            }
 
            this._listeners[event].push(callback);
        },
 
        clear: function (event, callback) {
            var listeners = this._listeners[event];
            var i = listeners.length;
 
            if (listeners === undefined) {
                throw new Error('Unknown event type: ' + event);
            }
 
            if (callback === undefined) {
                this._listeners[event] = [];
                return;
            }
 
            while (i > 0) {
                i -= 1;
                if (listeners[i] === callback) {
                    this._listeners[event].splice(i, 1);
                }
            }
        },
  
        send: function (event, msg) {
            var listeners = this._listeners[event];
            var i = listeners.length;
 
            if (listeners === undefined) {
                throw new Error('Unknown event type: ' + event);
            }
 
            while (i > 0) {
                i -= 1;
                listeners[i](msg);
            }
        }
    };
})();

 

 

三.用法

1
2
3
4
5
6
7
var events = new Jif();
//订阅天气
events.on('weather', function (weather) {
    alert('today is   ' + weather.condition);
});
//发布天气
events.send('weather', { condition: 'sunny' });

可以看得出来,这里实现了发布与订阅,但是忽略了发布者和订阅者的概念,而是统一由events中转。

 

 

四.其他相关链接

Observer Design Pattern Using JavaScript:http://www.codeproject.com/KB/scripting/Observer_Pattern_JS.aspx

javascript观察者模式: http://www.cnblogs.com/rubylouvre/archive/2010/03/29/1699203.html

Javascript乱弹设计模式系列(1) - 观察者模式(Observer):http://www.cnblogs.com/liping13599168/archive/2009/01/01/1366599.html

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示