发布订阅
class EventEmitter{
constructor(){
this._events = {}
this.defaultMaxListeners = 10;
}
on(eventName, callback) {
debugger
if (!this._events) {
this._events = {}
}
if (this._events[eventName]) {
this._events[eventName].push(callback)
}else{
this._events[eventName] = [].concat(callback)
}
}
emit(eventName) {
debugger
let args = Array.prototype.slice.call(arguments)
args.shift()
if (this._events[eventName]) {
this._events[eventName].forEach(cb => cb.apply(null,args));
}
}
removeListener(eventName,callback) {
debugger
if (this._events[eventName]) {
this._events = this._events.filter(fn=>{
return fn !== callback
})
}
}
addEventListener(eventName,callback) {
debugger
this.on(eventName,callback)
}
removeAllListener(){
this._events = {}
}
}
let e = new EventEmitter()
e.on('11111',(data)=>{
debugger
console.log('data',data)
console.log('on')
})
e.on('22222',(data)=>{
debugger
console.log('data',data)
console.log('on')
})
console.log('1')
e.emit('11111','data11','data111')
e.emit('22222','data22','data222')
观察者与被观察者
class Subject{
constructor(){
debugger
this.name = name
this.observers = []
this.state = '心情很好'
}
attach(observer) {
debugger
this.observers.push(observer)
}
setState(newState) {
debugger
this.state = newState
this.observers.forEach(o => o.update(newState));
}
}
class Observer{
constructor(name){
debugger
this.name = name
}
update(newState) {
debugger
console.log(" Observer ~ update ~ newState", this.name,newState)
}
}
let e = new Subject('小宝宝')
let o1 = new Observer('妈妈')
let o2= new Observer('爸爸')
e.attach(o1)
e.attach(o2)
e.setState('------')
发布订阅
class Events{
constructor(){
this.callbacks = []
this.results = []
}
on(callback) {
debugger
this.callbacks.push(callback)
}
emit(data) {
debugger
this.results.push(data)
this.callbacks.forEach(cb => cb(this.results));
}
}
let e = new Events()
e.on((data)=>{
debugger
console.log('data',data)
console.log('on')
})
console.log('1')
e.emit('11111')