//发布-订阅类
function Event(){
this.events = {};
}
Event.prototype = {
on: function(key, fun){
if (!this.events[key]){
this.events[key] = [];
}
if (typeof fun == 'function'){
this.events[key].push(fun);
}
},
emit: function(attr){
var funs = this.events[attr];
if (attr.indexOf('.') > 0){
var attrs = attr.split('.');
var parentAttr = Array.prototype.slice.call(attrs, 0, attrs.length-1).join('.');
this.emit(parentAttr);
}
if (funs && funs.length > 0){
for (var i = 0; i < funs.length; i ++){
funs[i]();
}
} else {
console.log('没有绑定' + attr + '事件');
return
}
}
}
// var e1 = new Event();
// e1.on('a.b.c', function(){
// console.log('a-b-c');
// });
// e1.on('a.b', function(){
// console.log('a-b');
// });
// e1.on('a', function(){
// console.log('a');
// });
// e1.emit('a.b.c');// 模拟事件冒泡,触发a.b.c的同时,也触发了a.b和a
javascript 观察者模式 (订阅者与发布者)
最新推荐文章于 2023-01-29 20:00:00 发布