用于JavaScript的分层状态机

时间:2012-05-04 00:16:00

标签: javascript state-machine

我一直对分层状态机特别感兴趣,特别是在JavaScript中,我找到了this框架,并且看起来像它的样子。但是我不确定它是否可以执行分层操作。

是否有人知道有关等级状态机的解决方案?

3 个答案:

答案 0 :(得分:4)

如果您需要类似this article中描述的模式,看起来您链接的框架可以这样做:

  

状态机类

     

您还可以通过将状态机功能应用于原型来将类的所有实例转换为FSM,包括原型中的回调,并提供在构造实例时使用的启动事件:

MyFSM = function() {    // my constructor function
  this.startup();
};

MyFSM.prototype = {

  onpanic: function(event, from, to) { alert('panic');        },
  onclear: function(event, from, to) { alert('all is clear'); },

  // my other prototype methods

};

StateMachine.create({
  target: MyFSM.prototype,
  events: [
    { name: 'startup', from: 'none',   to: 'green'  },
    { name: 'warn',    from: 'green',  to: 'yellow' },
    { name: 'panic',   from: 'yellow', to: 'red'    },
    { name: 'calm',    from: 'red',    to: 'yellow' },
    { name: 'clear',   from: 'yellow', to: 'green'  }
  ]});
  

这应该很容易调整,以适合对象构造的适当机制。

换句话说,在这一点上,您应该可以执行通常的JavaScript继承,例如:

function MyCalmFSM() {
    MyFSM.apply(this, arguments);
}

MyCalmFSM.prototype = Object.create(MyFSM.prototype);
MyCalmFSM.prototype.constructor = MyCalmFSM;

// Don't panic
MyCalmFSM.prototype.onpanic = function(event, from, to) { alert("Don't panic"); }

答案 1 :(得分:3)

看看:https://github.com/steelbreeze/state.js

它以与UML 2.x规范紧密对齐的方式支持交替状态(状态,伪状态和最终状态)和区域的层次结构。这是该项目的早期阶段,但基础知识已经存在。

答案 2 :(得分:0)

我知道这是一个老问题,但您可以查看基于可以设计HSM的jQuery的iFSM库:https://github.com/intersel/iFSM