每周優秀代碼賞析系列【二】----Jif
2011-10-30 12:06 【當耐特】 閱讀(3446) 評論(3) 收藏 舉報一.簡介
Jif是一個輕量級的events,Jif提供了事件監聽on、發送send和清空clear接口,我們可以為其擴展remove 等接口。
Jif也是觀察者模式的一種優雅實現。
二.代碼公布
下面就公布本周的優秀代碼:
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);
}
}
};
})();
三.用法
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.rzrgm.cn/rubylouvre/archive/2010/03/29/1699203.html
Javascript亂彈設計模式系列(1) - 觀察者模式(Observer):http://www.rzrgm.cn/liping13599168/archive/2009/01/01/1366599.html
浙公網安備 33010602011771號