var Dispatch={
keys:{},
//订阅,同一个key可以订阅多个不同的函数
subscribe:function(key, fn, context){
if(!this.keys[key]){
this.keys[key]=[]
}
this.keys[key].push({fn, context:context});
},
// 触发某个通知
notifyObs: function(key,params){
let fns = this.keys[key] || [];
if(!fns ||fns.length===0){
return false;
}
for(let i =0; i<fns.length; i++){
let {fn, context} = fns[i];
fn.call(context, params)
}
},
// // 广播通知所有
// broadcast: function(){
// let keys= this.keys;
// Object.keys(keys).forEach(item=>{
// let {fn, context} = keys[item];
// fn.call(context)
// })
// }
}
function Student(name){
this.name = name
}
s = new Student("lhf");
Student.prototype.study=function(param){
console.log("myname is ", this.name)
console.log("study", param)
}
jack = new Student("jack");
Dispatch.subscribe("study", jack.study, jack)
// 订阅
Dispatch.subscribe("study", s.study, s)
Dispatch.notifyObs("study", {type:"notice", num:1})
手写一个订阅发布者模式
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...