var msgCenter = (function () {
var _msg = {}
return {
register (type, fn) {
if (_msg[type]) {
_msg[type].push(fn)
} else {
_msg[type] = [fn]
}
},
fire (type, args) {
if (!_msg[type]) {
return
}
var event = {
type: type,
args: args || {}
}
for (var i = 0; i < _msg[type].length; i++) {
_msg[type][i](event)
}
},
cancel (type, fn) {
if (!_msg[type]) {
return
}
for (var i = 0; i < _msg[type].length; i++) {
if (_msg[type][i] === fn) {
_msg[type].splice(i, 1)
break
}
}
}
}
})()
function Person () {
this.alreadyRegister = {
}
}
Person.prototype.register = function (type, fn) {
if (this.alreadyRegister[type]) {
console.log('你已经订阅过这个消息了,请不要重复订阅')
} {
msgCenter.register(type, fn)
this.alreadyRegister[type] = fn
}
}
Person.prototype.cancel = function (type) {
msgCenter.cancel(type, this.alreadyRegister[type])
delete this.alreadyRegister[type]
}
class P {
alreadyRegister = {
}
register (type, fn) {
register (type, fn) {
if (this.alreadyRegister[type]) {
console.log('你已经订阅过这个消息了,请不要重复订阅')
} {
msgCenter.register(type, fn)
this.alreadyRegister[type] = fn
}
}
}
cancel (type) {
msgCenter.cancel(type, this.alreadyRegister[type])
delete this.alreadyRegister[type]
}
}
var person1 = new Person()
var person2 = new Person()
var person3 = new Person()
person1.register('carInfo', function (e) {
console.log('person1得到了关于' + e.type + '的消息', '消息内容:' + e.args.info)
})
person1.register('newsInfo', function (e) {
console.log('person1得到了关于' + e.type + '的消息', '消息内容:' + e.args.info)
})
person2.register('carInfo', function (e) {
console.log('person2得到了关于' + e.type + '的消息', '消息内容:' + e.args.info)
})
person3.register('newsInfo', function (e) {
console.log('person3得到了关于' + e.type + '的消息', '消息内容:' + e.args.info)
})
person3.register('carInfo', function (e) {
console.log('person3得到了关于' + e.type + '的消息', '消息内容:' + e.args.info)
})
msgCenter.fire('carInfo', { info: '新款消息上市了!' })
msgCenter.fire('newsInfo', { info: '某国家领导人访华!' })