网页的本质就是超级文本标记语言,通过结合使用其他的Web技术(如:脚本语言、公共网关接口、组件等),可以创造出功能强大的网页。因而,超级文本标记语言是万维网(Web)编程的基础,也就是说万维网是建立在超文本基础之上的。超级文本标记语言之所以称为超文本标记语言,是因为文本中包含了所谓“超级链接”点。
本篇文章给大家带来的内容是关于javascript发布订阅模式的详解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
发布订阅模式
事件发布/订阅模式 (PubSub) 在异步编程中帮助我们完成更松的解耦,甚至在 MVC、MVVC 的架构中以及设计模式中也少不了发布-订阅模式的参与。
优点:在异步编程中实现更深的解耦
缺点:如果过多的使用发布订阅模式,会增加维护的难度
实现发布订阅模式
var Event = function() {
this.obj = {}
}
Event.prototype.on = function(eventType,fn) {
if(!this.obj[eventType]) {
this.obj[eventType] = []
}
this.obj[eventType].push(fn)
}
Event.prototype.emit = function() {
// 取第一个参数,作为eventType
var eventType = Array.prototype.shift.call(arguments);
// 获取事件数组
var arr = this.obj[eventType];
var len = arr.length;
// 循环数组,一次执行其中的函数
for(var i=0;i<len;i++) {
// 直接调用arr[i],其this指向为undefined(严格模式下)
// 因此用apply将this指向arr[i]
// 数组shift函数取出第一个参数,将剩下的参数传入函数中
arr[i].apply(arr[i],arguments)
}
}
var ev = new Event()
ev.on('click',function(a) { // 订阅
console.log(a)
})
ev.emit('click',1) // 发布