zoukankan      html  css  js  c++  java
  • [整理]JS中的状态机

    /*StateMachine*/
          var StateMachine = (function(){
    
            function StateMachine(opts){
              this.current = opts.initial||'none'
              this.events = opts.events||[]
    
              for(var i=0,length=this.events.length;i<length;i++){
                var self = this
                var evt = self.events[i]
                
                self[evt.name] = function (self,evt){
                  return function(){
    
                    if(typeof self.onchanging === 'function'){
                      self.onchanging(evt)
                      console.log('trace->onchanging')
                    }
    
                    if(self.is(evt.from)){
                      self.current = evt.to
    
                      if(typeof self.onchanged === 'function'){
                        self.onchanged()
                        console.log('trace->onchanged')
                      }
    
                      console.log(evt.name+'->transition from '+evt.from+' to '+evt.to)
                    }
                  }
                }(self,evt)
              }
            }
    
            StateMachine.prototype = {
              is: function (s){
                return this.current===s
              },
              can: function (e){
                var _events = this.events
                var _event
    
                for(var i=0,length=_events.length;i<length;i++){
                  _event = _events[i]
    
                  if(_event.from===this.current&&_event.name===e){
                    return true
                  }
                }
    
                return false
              }
            }
    
            return {          
              create: function (opts){
                var fsm = new StateMachine(opts)
                return fsm
              }
            }
          })()

    参考

    http://www.ruanyifeng.com/blog/2013/09/finite-state_machine_for_javascript.html
    http://www.cnblogs.com/wadeyu/archive/2012/11/23/2784894.html
    http://developer.51cto.com/art/201405/440102.htm
    http://segmentfault.com/q/1010000000673177
    https://github.com/jakesgordon/javascript-state-machine/

  • 相关阅读:
    networkX用法整
    在人生路上对我影响最大的三位老师
    介绍自己
    介绍自己
    自我介绍
    打印沙漏1
    介绍自己
    对我影响最大的三位老师
    人生路上影响对我最大的三位老师
    1.自我介绍
  • 原文地址:https://www.cnblogs.com/Benoly/p/4256451.html
Copyright © 2011-2022 走看看