位置: 编程技术 - 正文

谈一谈JS消息机制和事件机制的理解(谈一谈js消息机制的理解)

编辑:rootadmin

推荐整理分享谈一谈JS消息机制和事件机制的理解(谈一谈js消息机制的理解),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:消息机制和事件机制,消息机制,消息机制,谈一谈js消息机制的理解,消息机制 java,消息机制,谈一谈js消息机制的理解,谈一谈js消息机制的理解,内容如对您有帮助,希望把文章链接给更多的朋友!

消息/事件机制是几乎所有开发语言都有的机制,并不是deviceone的独创,在某些语言称之为消息(Event),有些地方称之为(Message). 其实原理是类似的,只不过有些实现的方式要复杂一点。我们deviceone统一就叫消息.

消息基础概念

还有一些初学者不太熟悉这个机制,我们先简单介绍一些基础概念,如果熟悉的人可以跳过这个部分。一个/条消息可以理解为是一个数据结构,包含以下几个基本部分:

1.消息源:就是消息的来源,发出这个消息的对象

2.消息名:就是消息的唯一标示

3.消息数据:消息发出后附带的数据,有可能数据是空

消息从种类上又可以分为2种:

1.系统消息:由操作系统或deviceone系统发送出来的消息,消息的名称是固定的。

2.自定义消息:由开发者自己定义,自己发送出来的消息,消息的名字是随意的,可以任意定义。

举例说明:

比如用户点击一个do_Button按钮,就会触发一个系统消息,包含3个部分:

1.消息源:用户点中的button对象

2.消息名:touch

3.消息数据:这个消息没有附带数据

比如用户通过do_Button按钮触发一个自定义事件,包含3个部分:

1.消息源: button对象

2.消息名:用户随便定义,叫aaa,bbb,ccc都可以

3.消息数据:附带的数据由触发消息的时候设定

发布/订阅模式

发布/订阅模式是最常用的设计模式之一,是消息机制的核心,其特点就是降低耦合度,让二个独立的对象不互相依赖。简单介绍一下,熟悉的同学可以跳过。

我们先从现实的一个简单例子来说明这个问题,参考下图:

从这个图我们可以看出

1.消费者和出版社互相不认识,消费者不需要了解他想要的杂志是具体哪家出版社出的;出版社也不需要了解具体是哪个人定了他们出版社发行的书。

2.消费者和出版社必须都认识邮局。

3.消费者需要告诉邮局消费者的名字地址以及想要订阅的杂志名字

4.可以多个消费者订阅同一本杂志

谈一谈JS消息机制和事件机制的理解(谈一谈js消息机制的理解)

5.邮局拿到杂志后,会一一通知消费者,通知的时候同时把杂志送到消费者手里。

看完上面现实例子,我们再来看抽象的描述会更清晰一点,看下图:

和上面的实际例子描述一一对应:

1.系统/开发者和函数对象互相不依赖,系统/开发者只管触发一个消息,并不关心谁去接受

2.系统/开发者和函数对象必须能获取到消息源对象

3.函数对象订阅消息的时候需要标示消息的名称和函数对象的引用

4.可以多个函数对象订阅同一个消息源同一名字的消息

5.消息源触发消息会一一通知所有订阅者,并把data数据传递到回调函数对象

看完抽象的描述,我们最后来看实际的deviceone开发的例子,还是以do_Button为例子。

1. 当用户点击一个button,触摸到的时候,系统会获取到button这个对象作为消息源,fire一个”touch”消息,任何订阅了”touch”消息的函数对象都会接收到这个消息并引起函数的执行。

2. 我们可以为button对象定义2个自定义的消息”message1”和”message2”,分别有2个函数对象订阅这2个消息。但是最后要触发这个消息必须是开发者通过调用fire函数才能触发,这就是和系统消息的区别。

看到这里,你肯定会奇怪,为什么我们要在button上自定义对象?这有神马意义?其实确实没有意义也没有必要,这里只是拿button举例子,在常规的开发中,基本不会这么用。

消息的使用

前面讲了这么多,现在才是deviceone消息的使用。使用其实很简单,上面的例子基本说明的了系统事件和自定义事件的使用方法。

有几个概念再说明一下

1.deviceone的所有对象,包括UI,MM,SM对象都可以是消息源

2.消息源对象有作用域,所以订阅和触发的消息源必须是是一个作用域的同一个对象。这里结合数据分享和数据传递文档来理解。

看以下的例子,test1.ui和test2.ui有可能在一个page作用域,也有可能不在一个作业域,只有在一个作用域fire的消息才能正确送达回调函数。

判断是否一样,可以通过打印page的地址 page.getAddress().

如果不在同一page作用域,则可以把消息订阅在2个page都能共享到的app作用域上面的代码改成:

3.同样的函数对象可以重复订阅一个对象源的消息,触发消息的时候会使函数执行多次,这是初学者经常犯的错误。

看上面的例子,如果执行的话,会打印2此,因为订阅了2次,或许你会说谁会写这样的代码?实际情况肯定没有这么容易看出来执行了重复的on函数,实际情况经常是比如在点击事件里执行on函数,每点击一下按钮,就重复订阅一次。

4.消息的订阅一定要在消息的触发之前,这是初学者经常犯的错误。

看上面的例子,如果执行的话,会没有效果,或许你会说谁会写这样的代码?实际情况肯定没有这么容易看出来顺序反了,实际情况经常是比如on函数执行在某一个函数的回调函数里,你无法确定回调函数啥时候执行,是否是在fire之前执行。一般碰到这种情况可以加几个deviceone.print打印一下看看是on先执行还是fire先执行。

5.有订阅就有取消订阅,取消订阅是off函数,之所以很少用,是因为closePage的时候会自动把当前page作用域订阅的消息全部释放。

但是如果消息订阅在app作用域,就要注意,可能需要手动去取消订阅。否则就会出现触发消息的时候会使函数执行多次的问题。

看上面的例子,打印只会执行一次,因为fire一次后就取消订阅了。

Javascript实现鼠标框选操作 不是点击选取 本文实例为大家分享了Javascript实现鼠标框选操作,绝不是点击选取,供大家参考,具体内容如下效果图:代码:htmlhead/headstylebody{padding:px;}.fileDiv{float

js仿小游戏选字游戏 本文实例为大家分享了js仿小游戏中你是色盲吗游戏,大家先来挑战一下游戏目标:按画面中出现的文字的颜色来选择颜色,千万不要被颜色的困局打

原生js实现autocomplete插件 在实际的项目中,能用别人写好的插件实现相关功能是最好不过,为了节约时间成本,因为有的项目比较紧急,没充分时间让你自己来写,即便写了,

标签: 谈一谈js消息机制的理解

本文链接地址:https://www.jiuchutong.com/biancheng/373445.html 转载请保留说明!

上一篇:Kindeditor在线文本编辑器如何过滤HTML(kindeditor获取内容)

下一篇:Javascript实现鼠标框选操作 不是点击选取(js实现鼠标事件)

  • 增值税的附加税比例
  • 季度内超过30万红冲后用不用缴税?
  • 公益事业捐赠的范围是什么
  • 融资租赁租出的固定资产需要计提折旧吗
  • 待处理财产损益借贷方向
  • 综合所得申报是报上个月的吗
  • 电子税务局怎么添加财务负责人
  • 企业垃圾处理费计入什么科目
  • 个人所得税里累计专项扣除是什么意思
  • 交易性金融资产的账务处理
  • 他人购买股权个人所得缴纳个人所得税率是多少?
  • 小规模纳税人取得的专票转为一般纳税人之后能抵扣吗
  • 物业做账的时候怎么做
  • 携税宝的费用可以全额抵扣吗
  • 年薪制离职补偿金如何计算?
  • 什么企业做汇算清缴报告
  • 电梯安装简易征收的优点
  • 内蒙古地税电子税务局app
  • 购买债券发生的交易费用计入哪个科目
  • 企业空气检测费应该计入什么会计科目核算?
  • 家具上的木蜡油味去除
  • 个人给公司付款怎么做分录
  • 摊销费用多做如何做账?
  • Win11 Dev Build 22000.65开发预览版推送(附更新修复已知问题汇总)
  • 交易性金融资产是什么意思
  • 长期待摊费用的概念
  • 为什么入账价值不包括增值税
  • vue+element-ui项目
  • PHP:pg_set_client_encoding()的用法_PostgreSQL函数
  • 研发费用支出税前扣除比例
  • phpsessid是什么
  • php常见字符串函数
  • 个人合伙企业如何计算个人所得税
  • 自动驾驶的时候可以睡觉吗
  • 镶嵌在巨石之间的英文
  • 详解php匿名函数
  • 埃菲尔铁塔翻绳的方法
  • 前端解决跨域问题的8种方案(最新最全)
  • 制造业企业资金如何循环周转
  • python 统计学包
  • 深度卷积神经网络基本结构
  • 车票抵扣增值税在哪里申报
  • 业务招待费包括哪些内容和费用
  • 远期外汇合约的特点
  • 企业所得税的计算公式三种
  • 一般纳税人销售自行开发的软件产品
  • 机动车发票抵扣新规
  • 补缴教育费附加免征滞纳金
  • mysql查询的结果缓存里怎么清除
  • windows mongodb安装与配置
  • 什么情况下需要做心脏造影
  • 跨年收入退款如何处理
  • 为什么收到要发1
  • 小规模纳税人企业所得税怎么算
  • 增值税发票跨月可以作废吗
  • 一般纳税人资格证书怎么查询
  • 工地的工人工资怎么入账
  • 股权转让的实质
  • 广告费属于管理费用的哪一类
  • 小规模纳税人开具的农产品普通发票
  • 外派员工的薪酬构成有哪些项目
  • 投资入股行为
  • centos 操作
  • win7设置在哪里设置
  • linux例子
  • centos fuser
  • sendmail邮件服务器的配置
  • 关闭windows游戏
  • cocos2dx 2.2.2
  • node.js常用命令
  • js拖拽生成页面
  • Android性能优化的方面12个
  • scroll-view组件用于实现
  • 电子税务局数字证书未检测到证书
  • 进口商品的消费税计入成本吗
  • 威科先行法律信息库价格
  • 深圳罗湖区公安局长安慧君简历
  • 北京四合院为什么出名那么多
  • 福建省个人所得税申报系统
  • 土地整治税率是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设