javascript发布订阅模式的示例分析-创新互联
这篇文章主要介绍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以上代码只能实现先订阅,再发布。直接发布就会报错。如何实现可以先发布,然后订阅?
var Event = function() {
this.obj = {};
this.cacheList = [];
}
Event.prototype.emit = function() {
const args = arguments; //函数参数
const that = this; //this指向,保持cache函数的this指向
function cache() {
var eventType = Array.prototype.shift.call(arg)
var arr = that.obj[eventType]
for (let i = 0; i < arr.length; i++) {
arr[i].apply(arr[i], arg)
}
}
this.cacheList.push(cache) // 采用闭包,保持对emit函数中参数和that的引用
}
Event.prototype.on = function(eventType,fn) {
if(!this.obj[eventType]) {
this.obj[eventType] = []
}
this.obj[eventType].push(fn)
// 在订阅函数中执行emit函数中缓存的函数
for (let i = 0; i < this.cacheList.length; i++) {
this.cacheList[i]()
}
}改成这样后就实现了先发布函数,再订阅的过程。但是也只能先发布,然后再订阅,反过来就行不通。
以上是“javascript发布订阅模式的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文标题:javascript发布订阅模式的示例分析-创新互联
链接URL:http://www.jxjierui.cn/article/cchopg.html


咨询
建站咨询
