返回顶部
首页 > 资讯 > 前端开发 > node.js >JavaScript有限状态机有什么特征
  • 528
分享到

JavaScript有限状态机有什么特征

2024-04-02 19:04:59 528人浏览 薄情痞子
摘要

这篇文章主要讲解了“javascript有限状态机有什么特征”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript有限状态机有什么特征”吧!有限

这篇文章主要讲解了“javascript有限状态机有什么特征”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript有限状态机有什么特征”吧!

有限状态机(Finite-state Machine)是一个非常有用的模型,可以模拟世界上大部分事物。

JavaScript有限状态机有什么特征

简单说,它有三个特征:

* 状态总数(state)是有限的。
* 任一时刻,只处在一种状态之中。
* 某种条件下,会从一种状态转变(transition)到另一种状态。

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

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

代码可以写成下面这样:

 var menu = {        // 当前状态  currentState: 'hide',    // 绑定事件  initialize: function() {  var self = this;  self.on("hover", self.transition);  },    // 状态转换  transition: function(event){  switch(this.currentState) {  case "hide":  this.currentState = 'show';  doSomething();  break;  case "show":  this.currentState = 'hide';  doSomething();  break;  default:  console.log('Invalid State!');  break;  }  }    };

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

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

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

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

var fsm = StateMachine.create();

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

var fsm = StateMachine.create({    initial: 'green',    events: [  { name: 'warn',  from: 'green',  to: 'yellow' },  { name: 'stop', from: 'yellow', to: 'red' },  { name: 'ready',  from: 'red',    to: 'yellow' },  { name: 'Go', from: 'yellow', to: 'green' }  ]    });

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

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

* fsm.current :返回当前状态。
* fsm.is(s) :返回一个布尔值,表示状态s是否为当前状态。
* fsm.can(e) :返回一个布尔值,表示事件e是否能在当前状态触发。
* fsm.cannot(e) :返回一个布尔值,表示事件e是否不能在当前状态触发。

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

* onbeforewarn:在warn事件发生之前触发。
* onafterwarn(可简写成onwarn) :在warn事件发生之后触发。

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

* onleavegreen :在离开green状态时触发。
* onentergreen(可简写成ongreen) :在进入green状态时触发。

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

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

* onbeforeevent :任一事件发生之前触发。
* onleavestate :离开任一状态时触发。
* onenterstate :进入任一状态时触发。
* onafterevent :任一事件结束后触发。

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

fsm.onleavegreen = function(){  light.fadeOut('slow', function() {  fsm.transition();  });  return StateMachine.ASYNC;  };

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

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

var fsm = StateMachine.create({  // ...  error: function(eventName, from, to, args, errorCode, errORMessage) {  return 'event ' + eventName + ': ' + errorMessage;  },  // ...   });

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

感谢各位的阅读,以上就是“JavaScript有限状态机有什么特征”的内容了,经过本文的学习后,相信大家对JavaScript有限状态机有什么特征这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: JavaScript有限状态机有什么特征

本文链接: https://lsjlt.com/news/86455.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JavaScript有限状态机有什么特征
    这篇文章主要讲解了“JavaScript有限状态机有什么特征”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript有限状态机有什么特征”吧!有限...
    99+
    2024-04-02
  • Javascript的特征有哪些
    这篇文章给大家分享的是有关Javascript的特征有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 “编译执行”不属于Javascript的特征...
    99+
    2024-04-02
  • HTML5有什么新特征
    本篇内容主要讲解“HTML5有什么新特征”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5有什么新特征”吧!一、HTML5 中的一些有趣的新特性:用于绘画...
    99+
    2024-04-02
  • Unity学习之FSM有限状态机
    前言:一个游戏里的一个人物会存在多种状态,那么就需要有一个专门管理这些状态的类。不然会显得杂乱无章,不易于后面状态的增加或者减少。 思路:既然要方便管理,那么首先肯定得有个系统类(专...
    99+
    2024-04-02
  • C++有限状态机实现详解
    目录有限状态机四大要素C++函数指针实现总结前提:因为最近打算学设计模式的状态模式,但不是很明白有限状态机和状态模式之间的关系,索性用C++实现了一个简单案例复习了一下FSM,如果有...
    99+
    2024-04-02
  • C++怎么实现一个有限状态机
    本篇内容介绍了“C++怎么实现一个有限状态机”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是有限状态机?简单说就是作一件事可能会经过多个...
    99+
    2023-06-03
  • DNS劫持有什么特征
    DNS劫持的特征有以下几点访问网站的标题、关键字和描述与想象中的不符;打开下载链接,下载的并不是所需要的东西;网站中没有出现挂马代码,使用杀毒软件也无法检测到病毒;无法对网站的根目录进行删除,且无法发现隐藏文件夹的存在;...
    99+
    2024-04-02
  • 香港免备案主机有什么特征
    香港免备案主机通常具有以下特征: 无需备案:用户无需提供备案信息,即可直接开通主机服务。 稳定性高:香港作为全球互联网中心之...
    99+
    2024-05-14
    香港主机
  • 云主机有哪些特征
    云主机的特征有:1、采用虚拟化技术构建云端资源池,能快速部署和自由搭配资源;2、采用分布式存储系统,可扩展性好,性能和可靠性高,能实现实时多重副本容灾,能有效规避多种故障,且支持存储资源的弹性伸缩、热迁移等功能;3、支持资源弹性调配,用户可...
    99+
    2024-04-02
  • 云服务器有什么特征
    云服务器有以下特征: 弹性扩展:可以根据实际需求灵活调整服务器配置,增加或减少计算资源、存储空间等。 高可靠性:云服务器通常...
    99+
    2024-05-09
    云服务器
  • React使用有限状态机的实现示例
    目录什么是有限状态机?有限状态机的示例有限状态机和软件开发、计算机科学有什么关系?举了那么多例子,但我该怎么展示在前端开发中使用状态机呢?React 应用程序中的注册表单的传统实现方...
    99+
    2024-04-02
  • windows状态栏有哪些特点
    本篇内容主要讲解“windows状态栏有哪些特点”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“windows状态栏有哪些特点”吧!windows状态栏是什么:答:windows状态栏就是在你的电...
    99+
    2023-07-02
  • java中泛型方法有什么特征
    本篇文章给大家分享的是有关java中泛型方法有什么特征,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。常用的java框架有哪些1.SpringMVC,Spring Web MVC...
    99+
    2023-06-14
  • Python编程使用有限状态机识别地址有效性
    在收发快递填写地址的时候,我们会经常手动输入地址让程序智能识别,标准的地址比如,xx省xx市xx县/区xx路xx号,不过有时候也可以简单写:xx市xx县/区xx路xx号,或者xx省x...
    99+
    2024-04-02
  • drools的有状态Session和无状态Session是什么
    这篇文章主要介绍了drools的有状态Session和无状态Session是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇drools的有状态Session和无状态Session是什么文章都会有所收获,下面...
    99+
    2023-06-30
  • JavaScript具有的特点有什么
    本篇内容介绍了“JavaScript具有的特点有什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • 计算机病毒都有哪些特征
    这篇文章主要介绍了计算机病毒都有哪些特征,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。计算机病毒的5个特征是:1、寄生性;计算机病毒需要在宿主中寄生才能生存,才能更好地发挥其...
    99+
    2023-06-14
  • 一文详解Go语言中的有限状态机FSM
    目录1、FSM简介1.1 有限状态机的定义1.2 Go中的FSM2、github.com/looplab/fsm 如何使用2.1 fsm 基础使用2.2 fsm 中 Action 何...
    99+
    2023-05-17
    Go语言有限状态机FSM Go 有限状态机 Go FSM
  • JS前端实现fsm有限状态机实例详解
    目录引言举个栗子从零开始获取状态状态改变transition实现fsm状态机实现钩子函数完整代码总结引言 我们平时开发时本质上就时对应用程序的各种状态进行切换并作出相应处理,最直接的...
    99+
    2024-04-02
  • Java实现有限状态机的推荐方案分享
    目录一、背景 二、推荐方式2.1 自定义的枚举 2.2 外部枚举 三、总结 一、背景 平时工作开发过程中,难免会用到状态机(状态的流转)。 如奖学金审批流程、请假审批流程、竞标流程...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作