<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>发布&订阅模式</title>
<script>
var PubSub = {
subscribe: function (ev, callback) {
// 创建 _callbacks 对象,除非它已经存在了
var calls = this._callbacks || (this._callbacks = {});
// 针对给定的事件 key 创建一个数组,除非这个数组已经存在
// 然后将毁掉函数追加到这个数组中
(this._callbacks[ev] || (this._callbacks[ev] = [])).push(callback);
return this;
},
publish: function () {
// 将 arguments 对象转化为真正的数组
var args = Array.prototype.slice.call(arguments, 0);
// 拿出第 1 个参数,即事件名称
var ev = args.shift();
// 如果不存在,_callbacks 对象,则返回
// 或者如果不包含给定事件对应的数组
var list, calls, i, l;
if (!(calls = this._callbacks)) return this;
if (!(list = this._callbacks[ev])) return this;
// 触发回调
for (var i = 0, l = list.length; i < l; i++) {
list[i].apply(this, args);
}
return this;
}
};
// 使用方法
PubSub.subscribe('wem', function () {
alert('Wem');
});
PubSub.publish('wem');
</script>
</head>
<body>
</body>
</html>