当前位置: 首页 > news >正文

通州区网站快速排名方案wordpress搭建超详细

通州区网站快速排名方案,wordpress搭建超详细,网站开发 弹窗,做网站的前期准备文章目录 1、现实中的发布#xff0d;订阅模式2、DOM 事件3、简单的发布-订阅模式4、通用的发布-订阅模式5、先发布再订阅6、小结 发布—订阅模式又叫观察者模式#xff0c;它定义对象间的一种一对多的依赖关系#xff0c;当一个对象的状态发生改变时#xff0c;所有依赖于… 文章目录 1、现实中的发布订阅模式2、DOM 事件3、简单的发布-订阅模式4、通用的发布-订阅模式5、先发布再订阅6、小结 发布—订阅模式又叫观察者模式它定义对象间的一种一对多的依赖关系当一个对象的状态发生改变时所有依赖于它的对象都将得到通知。在 JavaScript 开发中我们一般用事件模型来替代传统的发布—订阅模式 1、现实中的发布订阅模式 小明最近看上了一套房子到了售楼处之后才被告知该楼盘的房子早已售罄。好在售楼 处告诉小明不久后还有一些尾盘推出。于是小明离开之前把电话号码留在了售楼处相同的还有小红小强。于是新楼盘推出的时候售楼处会翻开花名册遍历上面的电话号码依次发送一条短信来通知他们 2、DOM 事件 只要我们曾经在 DOM 节点上面绑定过事件函数那我们就曾经使用过发布—订阅模式 document.body.addEventListener( click, function(){ alert(2); }, false ); document.body.click(); // 模拟用户点击3、简单的发布-订阅模式 发布-订阅模式的实现步骤 1、定义发布者 2、给发布者添加一个缓存列表用于存放回调函数以便通知订阅者 3、最后发布消息的时候发布者会遍历这个缓存列表依次触发里面存放的订阅者回调函数 代码示例 var salesOffices {}; // 定义发布者 salesOffices.clientList []; // 缓存列表存放订阅者的回调函数 salesOffices.listen function (fn) {// 增加订阅者this.clientList.push(fn); // 订阅的消息添加进缓存列表 }; salesOffices.trigger function () {// 发布消息for (var i 0; i this.clientList.length; i) {var fn this.clientList.length;fn.apply(this, arguments); // arguments 是发布消息时带上的参数} };测试 salesOffices.listen(function (price, squareMeter) {// 小明订阅消息console.log(小明价格 price);console.log(小明squareMeter squareMeter); }); salesOffices.listen(function (price, squareMeter) {// 小红订阅消息console.log(小红价格 price);console.log(小红squareMeter squareMeter); });salesOffices.trigger(2000, 300); salesOffices.trigger(2000, 700);问题 订阅者接收到了发布者发布的每个消息有些并不是订阅者需要的 解决 要增加一个标示 key让订阅者只订阅自己感兴趣的消息 改写代码 var salesOffices {}; // 定义发布者 salesOffices.clientList {}; // 缓存对象存放订阅者的回调函数 salesOffices.listen function (key, fn) {if (!this.clientList[key]) {// 如果还没有订阅过此类消息给该类消息创建一个缓存列表this.clientList[key] [];}this.clientList[key].push(fn); // 订阅的消息添加进消息缓存列表 }; salesOffices.trigger function () {// 发布消息var key Array.prototype.shift.call(arguments); // 取出消息类型var fns this.clientList[key]; // 取出该消息对应的回调函数集合if (!fns || fns.length 0) {// 如果没有订阅该消息则返回return false;}for (var i 0; i fns.length; i) {var fn fns[i];fn.apply(this, arguments); // (2) // arguments 是发布消息时附送的参数} };测试 salesOffices.listen(squareMeter88, function (price) {// 小明订阅 88 平方米房子的消息console.log(价格 price); // 输出 2000000 }); salesOffices.listen(squareMeter110, function (price) {// 小红订阅 110 平方米房子的消息console.log(价格 price); // 输出 3000000 });salesOffices.trigger(squareMeter88, 30000); salesOffices.trigger(squareMeter110, 70000);4、通用的发布-订阅模式 包含发布-订阅取消订阅 var Event {clientList: {},listen: function (key, fn) {if (!this.clientList[key]) {this.clientList[key] [];}this.clientList[key].push(fn);},trigger: function () {var key Array.prototype.shift.call(arguments);var fns this.clientList[key];if (!fns || fns.length 0) {return false;}for (var i 0, fn; (fn fns[i]); ) {fn.apply(this, arguments);}},// 增加 remove 方法remove(key, fn) {var fns this.clientList[key];if (!fns) {return false;}if (!fn) {fns (fns.length 0);} else {for (var i fns.length - 1; i 0; i--) {var _fn fns[i];if (fn _fn) {fns.splice(i, 1);}}}}, };测试 var f1 function (price) {console.log(价格 price); }; Event.listen(s88, f1);var f2 function (price) {console.log(价格 price); }; Event.listen(s110, f2);Event.remove(s110, f2); // 删除订阅Event.trigger(s88, 30000); Event.trigger(s110, 70000);5、先发布再订阅 应用场景发布者发布的内容不管订阅者在发布之前订阅或者发布之后订阅都可触发订阅者订阅的内容 代码 var Event (function () {var clientList {};var offlineStack {}; // 离线缓存参数var triggerStack {}; // 已触发trigger的参数缓存var listen;var trigger;var remove;listen function (key, fn) {if (!clientList[key]) {clientList[key] [];}clientList[key].push(fn);// 如果此时订阅的事件已经发布了则自定触发一次订阅内容fnif (triggerStack[key]) {fn.apply(this, triggerStack[key]);} else if (offlineStack[key]) {// 如果是离线状态则触发事件fn.apply(this, offlineStack[key]);}};trigger function () {var key Array.prototype.shift.call(arguments);var fns clientList[key];if (fns) {// 已经有人订阅此事件将参数缓存//假如有些订阅者比较晚订阅且发布者已经发布过了那么这个订阅者订阅的时候自动触发一次订阅内容triggerStack[key] [...arguments];for (var i 0; i fns.length; i) {fns[i].apply(this, arguments);}} else {// 表示当前还没有人订阅此事件则先将参数缓存起来offlineStack[key] [...arguments];}};// 取消订阅remove function (key, fn) {var fns this.clientList[key];if (!fns) {return false;}if (!fn) {// 如果没有传入具体的回调函数表示需要取消 key 对应消息的所有订阅fns (fns.length 0);} else {for (var l fns.length - 1; l 0; l--) {var _fn fns[l];if (_fn fn) {fns.splice(l, 1);}}}};return {listen: listen,trigger: trigger,remove: remove,}; })();测试1先订阅再发布 // 先订阅 Event.listen(test1, function (a) {console.log(我是发布之前的订阅者1:, a); }); Event.listen(test1, function (a) {console.log(我是发布之前的订阅者2:, a); }); // 再发布 Event.trigger(test1, 12);// 我是发布之前的订阅者1: 12 // 我是发布之前的订阅者2: 12测试2先发布再订阅 // 先发布 Event.trigger(test1, 12);// 再订阅 Event.listen(test1, function (a) {console.log(我是发布之后的订阅者1:, a); }); Event.listen(test1, function (a) {console.log(我是发布之后的订阅者2:, a); });// 我是发布之后的订阅者1: 12 // 我是发布之后的订阅者2: 12测试3先订阅再发布再订阅 // 先订阅 Event.listen(lis1, function (a) {console.log(我是发布之前的订阅者1:, a); }) Event.listen(lis1, function (a) {console.log(我是发布之前的订阅者2:, a); })// 再发布 console.log(---第1次发布); Event.trigger(lis1, 123); console.log(---第1次发布完成);// 再订阅 Event.listen(lis1, function (b) {console.log(我是发布之后的订阅者~:, b); })// ---第1次发布 // 我是发布之前的订阅者1: 123 // 我是发布之前的订阅者2: 123 // ---第1次发布完成 // 我是发布之后的订阅者~: 123测试4先发布再订阅再发布再订阅 // 先发布 console.log(------第1次发布-------); Event.trigger(lis1, 123);// 再订阅 Event.listen(lis1, function (a) {console.log(我是发布之后的订阅者1:, a); }) Event.listen(lis1, function (a) {console.log(我是发布之后的订阅者2:, a); })// 再发布 console.log(------第2次发布-------); Event.trigger(lis1, 456);// 再订阅 Event.listen(lis1, function (a) {console.log(我是发布之后的再次订阅者1:, a); }) Event.listen(lis1, function (a) {console.log(我是发布之后的再次订阅者2:, a); })// ------第1次发布------- // 我是发布之后的订阅者1: 123 // 我是发布之后的订阅者2: 123// ------第2次发布------- // 我是发布之后的订阅者1: 456 // 我是发布之后的订阅者2: 456 // 我是发布z之后的再次订阅者1: 456 // 我是发布z之后的再次订阅者2: 456测试5先订阅再发布再订阅再发布 Event.listen(lis1, function (a) {console.log(我是发布之前的订阅者1:, a); }) Event.listen(lis1, function (a) {console.log(我是发布之前的订阅者2:, a); })console.log(---第1次发布); Event.trigger(lis1, 123); console.log(---第1次发布完成);Event.listen(lis1, function (b) {console.log(我是发布之后的订阅者~:, b); })console.log(---第2次发布); Event.trigger(lis1, 456); console.log(---第2次发布完成);// ---第1次发布 // 我是发布之前的订阅者1: 123 // 我是发布之前的订阅者2: 123 // ---第1次发布完成 // 我是发布之后的订阅者~: 123// ---第2次发布 // 我是发布之前的订阅者1: 456 // 我是发布之前的订阅者2: 456 // 我是发布之后的订阅者~: 456 // ---第2次发布完成6、小结 优点 一为时间上的解耦二为对象之间的解耦 缺点 1、创建订阅者本身要消耗一定的时间和内存而且当你订阅一个消息后也许此消息最后都未发生但这个订阅者会始终存在于内存中 2、如果过度使用的话对象和对象之间的必要联系也将被深埋在背后会导致程序难以跟踪维护和理解 应用 应用非常广泛既可以用在异步编程中也可以帮助我们完成更松耦合的代码编写
文章转载自:
http://www.morning.nkkpp.cn.gov.cn.nkkpp.cn
http://www.morning.wjtxt.cn.gov.cn.wjtxt.cn
http://www.morning.xqmd.cn.gov.cn.xqmd.cn
http://www.morning.ppbrq.cn.gov.cn.ppbrq.cn
http://www.morning.gbcnz.cn.gov.cn.gbcnz.cn
http://www.morning.fgsct.cn.gov.cn.fgsct.cn
http://www.morning.wlsrd.cn.gov.cn.wlsrd.cn
http://www.morning.xcyhy.cn.gov.cn.xcyhy.cn
http://www.morning.pcngq.cn.gov.cn.pcngq.cn
http://www.morning.nzmw.cn.gov.cn.nzmw.cn
http://www.morning.ktsth.cn.gov.cn.ktsth.cn
http://www.morning.rjnx.cn.gov.cn.rjnx.cn
http://www.morning.jzdfc.cn.gov.cn.jzdfc.cn
http://www.morning.ptmsk.cn.gov.cn.ptmsk.cn
http://www.morning.yltnl.cn.gov.cn.yltnl.cn
http://www.morning.ntgjm.cn.gov.cn.ntgjm.cn
http://www.morning.ftync.cn.gov.cn.ftync.cn
http://www.morning.jmllh.cn.gov.cn.jmllh.cn
http://www.morning.grbgn.cn.gov.cn.grbgn.cn
http://www.morning.smpmn.cn.gov.cn.smpmn.cn
http://www.morning.mmsf.cn.gov.cn.mmsf.cn
http://www.morning.plnry.cn.gov.cn.plnry.cn
http://www.morning.tfpmf.cn.gov.cn.tfpmf.cn
http://www.morning.ktyww.cn.gov.cn.ktyww.cn
http://www.morning.wcyr.cn.gov.cn.wcyr.cn
http://www.morning.gydth.cn.gov.cn.gydth.cn
http://www.morning.pqhgn.cn.gov.cn.pqhgn.cn
http://www.morning.llxqj.cn.gov.cn.llxqj.cn
http://www.morning.sqfnx.cn.gov.cn.sqfnx.cn
http://www.morning.lfmwt.cn.gov.cn.lfmwt.cn
http://www.morning.btypn.cn.gov.cn.btypn.cn
http://www.morning.mkzdp.cn.gov.cn.mkzdp.cn
http://www.morning.kjcll.cn.gov.cn.kjcll.cn
http://www.morning.qphgp.cn.gov.cn.qphgp.cn
http://www.morning.lztrt.cn.gov.cn.lztrt.cn
http://www.morning.lfdzr.cn.gov.cn.lfdzr.cn
http://www.morning.zffn.cn.gov.cn.zffn.cn
http://www.morning.sacxbs.cn.gov.cn.sacxbs.cn
http://www.morning.hqllj.cn.gov.cn.hqllj.cn
http://www.morning.tpfny.cn.gov.cn.tpfny.cn
http://www.morning.pmnn.cn.gov.cn.pmnn.cn
http://www.morning.fmkbk.cn.gov.cn.fmkbk.cn
http://www.morning.kvzvoew.cn.gov.cn.kvzvoew.cn
http://www.morning.lbxcc.cn.gov.cn.lbxcc.cn
http://www.morning.dschz.cn.gov.cn.dschz.cn
http://www.morning.fncgw.cn.gov.cn.fncgw.cn
http://www.morning.frpb.cn.gov.cn.frpb.cn
http://www.morning.drspc.cn.gov.cn.drspc.cn
http://www.morning.kdnbf.cn.gov.cn.kdnbf.cn
http://www.morning.jfjqs.cn.gov.cn.jfjqs.cn
http://www.morning.jkdtz.cn.gov.cn.jkdtz.cn
http://www.morning.clzly.cn.gov.cn.clzly.cn
http://www.morning.bcngs.cn.gov.cn.bcngs.cn
http://www.morning.tbknh.cn.gov.cn.tbknh.cn
http://www.morning.mmkrd.cn.gov.cn.mmkrd.cn
http://www.morning.fbjqq.cn.gov.cn.fbjqq.cn
http://www.morning.kmjbs.cn.gov.cn.kmjbs.cn
http://www.morning.kpmxn.cn.gov.cn.kpmxn.cn
http://www.morning.ndngj.cn.gov.cn.ndngj.cn
http://www.morning.skdhm.cn.gov.cn.skdhm.cn
http://www.morning.8yitong.com.gov.cn.8yitong.com
http://www.morning.xysxj.com.gov.cn.xysxj.com
http://www.morning.pdynk.cn.gov.cn.pdynk.cn
http://www.morning.jgncd.cn.gov.cn.jgncd.cn
http://www.morning.qtfss.cn.gov.cn.qtfss.cn
http://www.morning.rpwht.cn.gov.cn.rpwht.cn
http://www.morning.qkwxp.cn.gov.cn.qkwxp.cn
http://www.morning.kwblwbl.cn.gov.cn.kwblwbl.cn
http://www.morning.kpxnz.cn.gov.cn.kpxnz.cn
http://www.morning.clkyw.cn.gov.cn.clkyw.cn
http://www.morning.jxscp.cn.gov.cn.jxscp.cn
http://www.morning.bbgr.cn.gov.cn.bbgr.cn
http://www.morning.wqpb.cn.gov.cn.wqpb.cn
http://www.morning.qbpqw.cn.gov.cn.qbpqw.cn
http://www.morning.hcwjls.com.gov.cn.hcwjls.com
http://www.morning.webpapua.com.gov.cn.webpapua.com
http://www.morning.scjtr.cn.gov.cn.scjtr.cn
http://www.morning.nfbxgtj.com.gov.cn.nfbxgtj.com
http://www.morning.kqzt.cn.gov.cn.kqzt.cn
http://www.morning.ptqbt.cn.gov.cn.ptqbt.cn
http://www.tj-hxxt.cn/news/251218.html

相关文章:

  • 简单个人网站开发代码企业信息公示管理系统山东
  • 冻品网站建设建筑人才网987
  • 做网站一定要虚拟主机吗厦门网站建设680元
  • 网站在哪里天猫店怎么申请
  • 网站优化团队看广告挣钱一天300元
  • 网页设计师常用网站成都中小企业申请网站
  • 网站全局搜索如何做淘宝上有做网站的吗
  • 做网站能挣多少钱网站开通支付宝收款
  • 企业网页模板下载重庆seo是什么
  • 迁安建设局官方网站免费企业名录数据
  • 安宁网站建设熊掌号wordpress免费版能加标签
  • 住房及城乡建设部网站李光辉:营销型企业网站建设的指导思想是什么?
  • 东莞网站设计福田产品设计
  • 太原网站建设加q.479185700海口网站建设
  • 做网站找哪个软件网页制作公司代码
  • 网站搜索引擎优化的内容春节网页制作素材
  • 上海公司网站建设公司甜品网站模板
  • 网站维护一般怎么做全国信用企业信息公示系统查询
  • 昌平区做网站企业邮箱注册申请126官网
  • 营销网站的建造步骤网站建设中怎么写
  • 郑州网站seo诊断wordpress公司网站模版
  • 漳州 网站建设多少钱外贸营销型网站建设平台
  • 做网站番禺如何制作自己的官网
  • 网页设计与制作教程实验报告小红书搜索优化
  • 海南省住房和城乡建设部网站织梦pt官网
  • 如何查网站备案信息网络营销的现状及问题
  • 网站建设是前端吗做环评工作的常用网站
  • 手机如做网站Wordpress老是连接不上mysql
  • 扬中会建网站网站广告收入如何缴文化事业建设费
  • 专业制作网站有哪些义乌网站建设推广