位置: 编程技术 - 正文

javascript与有限状态机详解(js有while吗)

编辑:rootadmin

简单说,它有三个特征:

它对JavaScript的意义在于,很多对象可以写成有限状态机。

举例来说,网页上有一个菜单元素。鼠标悬停的时候,菜单显示;鼠标移开的时候,菜单隐藏。如果使用有限状态机描述,就是这个菜单只有两种状态(显示和隐藏),鼠标会引发状态转变。

代码可以写成下面这样:

可以看到,有限状态机的写法,逻辑清晰,表达力强,有利于封装事件。一个对象的状态越多、发生的事件越多,就越适合采用有限状态机的写法。

另外,JavaScript语言是一种异步操作特别多的语言,常用的解决方法是指定回调函数,但这样会造成代码结构混乱、难以测试和除错等问题。有限状态机提供了更好的办法:把异步操作与对象的状态改变挂钩,当异步操作结束的时候,发生相应的状态改变,由此再触发其他操作。这要比回调函数、事件监听、发布/订阅等解决方案,在逻辑上更合理,更易于降低代码的复杂度。

下面介绍一个有限状态机的函数库Javascript Finite State Machine。这个库非常好懂,可以帮助我们加深理解,而且功能一点都不弱。

该库提供一个全局对象StateMachine,使用该对象的create方法,可以生成有限状态机的实例。

生成的时候,需要提供一个参数对象,用来描述实例的性质。比如,交通信号灯(红绿灯)可以这样描述:

交通信号灯的初始状态(initial)为green,events属性是触发状态改变的各种事件,比如warn事件使得green状态变成yellow状态,stop事件使得yellow状态变成red状态等等。

生成实例以后,就可以随时查询当前状态。

Javascript Finite State Machine允许为每个事件指定两个回调函数,以warn事件为例:

同时,它也允许为每个状态指定两个回调函数,以green状态为例:

假定warn事件使得状态从green变为yellow,上面四类回调函数的发生顺序如下:onbeforewarn → onleavegreen → onenteryellow → onafterwarn。

除了为每个事件和状态单独指定回调函数,还可以为所有的事件和状态指定通用的回调函数。

如果事件的回调函数里面有异步操作(比如与服务器进行Ajax通信),这时我们可能希望等到异步操作结束,再发生状态改变。这就要用到transition方法。

上面代码的回调函数里面,有一个异步操作(light.fadeOut)。如果不希望状态立即改变,就要让回调函数返回一个StateMachine.ASYNC对象,表示状态暂时不改变;等到异步操作结束,再调用transition方法,使得状态发生改变。

Javascript Finite State Machine还允许指定错误处理函数,当发生了当前状态不可能发生的事件时自动触发。

比如,当前状态是green,理论上这时只可能发生warn事件。要是这时发生了stop事件,就会触发上面的错误处理函数。

推荐整理分享javascript与有限状态机详解(js有while吗),希望有所帮助,仅作参考,欢迎阅读内容。

javascript与有限状态机详解(js有while吗)

文章相关热门搜索词:javascript有啥用,javascript 与运算,javascript有啥用,javascript有类吗,js有while吗,js有while吗,javascript的区别,javascript有类吗,内容如对您有帮助,希望把文章链接给更多的朋友!

javascript操作excel生成报表示例 htmlheadscriptlanguage="javascript"type="text/javascript"functionMakeExcel(){vari,j;try{varxls=newActiveXObject("Excel.Application");}catch(e){alert("要打印该表,您必须安装Excel电子表格

js数组操作常用方法 在jquery中处理JSON数组的情况中遍历用到的比较多,但是用添加移除这些好像不是太多。今天试过json[i].remove(),json.remove(i)之后都不行,看网页的DOM对象

js的Prototype属性解释及常用方法 函数:原型每一个构造函数都有一个属性叫做原型(prototype,下面都不再翻译,使用其原文)。这个属性非常有用:为一个特定类声明通用的变量或者函数

标签: js有while吗

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

上一篇:ajax提交表单实现网页无刷新注册示例(ajaxfrom表单提交)

下一篇:javascript操作excel生成报表示例(js 操作excel)

  • 小规模纳税人企业所得税税率
  • 城市维护建设税为什么是流转税
  • 发票上的收款人复核开票人
  • 固定资产一次性扣除申报表怎么填
  • 个体户收现金可以开发票吗
  • 一年房租正常摊销多少
  • 个人所得税应补税额怎么办
  • 抵扣联的抵扣期限
  • 一般纳税人销售自己使用过的汽车
  • 应交消费税通过什么科目核算
  • 车辆报废补贴多久到账
  • 去年购进的货物今年才收到发票
  • 定额备用金制度有哪些
  • 佣金收入者是什么意思
  • 合作经营利润分配税务处理
  • 特殊销售方式下销售额的确定
  • 医院业务支出包括哪些内容科目
  • 租入生物性资产如何入账
  • 固定资产丢失收据怎么写
  • 兼营免税减税项目
  • 个人承包是什么意思
  • 待抵扣进项税贷方有余额什么意思
  • 未到期责任准备金属于什么科目
  • 发票已认证未抵扣怎么办
  • 固定资产减值准备属于什么科目
  • 定额发票存根要盖章吗
  • 两处拿工资的缴税问题
  • 什么情况下个税税率是10%
  • 财务都干些什么
  • 期间费用年末结转
  • 无法添加用户和组
  • 如何通过u盘重启
  • linux文件夹怎么删除
  • 你需要权限来执行操作是怎么回事
  • 如何计算经营性负债
  • 支付给其他公司帮代垫的社保款
  • 深度学习中模型计算量(FLOPs)和参数量(Params)的理解以及四种计算方法总结
  • 前端如何用canvas绘制座位图
  • 搜索神器官网
  • php网站配置
  • 傅里叶变换的过程
  • 若依idea
  • 长期待摊费用装修款如何摊销
  • 员工的交通费发票可以报销嘛
  • 边际贡献总额计算公式边际贡献率
  • mysql分库分表实践
  • PHP MongoDB GridFS 存储文件的方法详解
  • 公司股东投资在哪里查
  • 销售并提供安装服务怎么开票
  • sql server基本
  • 银行每月贷款额度有多少
  • 企业所得税年报申报时间
  • 车间设备折旧费计入产品成本吗
  • 发票已经认证后怎么撤销
  • 资产负债表中的固定资产怎么算
  • 路桥费税率是几个点
  • 工会经费计提比例0.8%
  • 来料加工成本是多少
  • 年末结余资金
  • 所有者权益的确认依赖于资产和负债的确认
  • 到期不付款跟客户怎么说
  • 员工体检费发票怎么入账
  • 会计软件什么范围分为单用户和多用户呢
  • 复式记账法主要有
  • 使用u盘安装windows10电脑识别不出来
  • RunClubSanDisk.exe是什么程序? 闪迪U盘广告推介程序
  • 桌面上家庭组图标是干嘛
  • win7系统搜索不到自己家wi-fi
  • linux 怎么样
  • win10系统激活后怎么关闭
  • 向量上面有个倒着的v
  • Cocos2dx3.2 Crazy Tetris update 定时更新 游戏逻辑处理
  • JQuery.validationEngine表单验证插件(推荐)
  • node的express
  • jquery怎么获取
  • 广东省电子税务局登录方式
  • 企业购置房屋需要交哪些税费
  • 土地评估报告书
  • 辽宁省地方税务局公告2014年第10号
  • 预付建造固定资产的工程价款
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设