var office = {
fnlist:{},
listen: function(key,fn){
if(!this.fnlist[key]){
this.fnlist[key] = []
}
this.fnlist[key].push(fn)
},
trigger: function(){
var key = Array.prototype.shift.call(arguments),
fnArr = this.fnlist[key];
if(!fnArr || fnArr.length===0){
return false
}
for(var i =0,fn;fn=fnArr[i++];){
fn.apply(this,arguments)
}
}
}
使用
office.listen('a',function(data){console.log(data)})
office.trigger('a',"我就是数据")
//输出 我就是数据
发布订阅模式的通用实现
修改下之前的代码
var event= {
fnlist:{},
listen: function(key,fn){
if(!this.fnlist[key]){
this.fnlist[key] = []
}
this.fnlist[key].push(fn)
},
trigger: function(){
var key = Array.prototype.shift.call(arguments),
fnArr = this.fnlist[key];
if(!fnArr || fnArr.length===0){
return false
}
for(var i =0,fn;fn=fnArr[i++];){
fn.apply(this,arguments)
}
}
}
js是一门解释之行的语言,给对象动态欠佳职责是很简单的事情
我们需要一个installEvent方法
var installEvent = function(obj){
for(var i in event){
obj[i] = event[i]
}
}
需要让一个对象 有 发布订阅功能
只需要
var a = {}
installEvent(a);
// a 对象就有了效果