JavaScript可以通过设计状态表、判断状态转移条件等方式来实现有限状态机。下面是一个简单的例子,通过代码实现了一个简单的两个状态的有限状态机。
//定义两个状态 const OFF = 0; const ON = 1; //定义状态转移表 const fsm = { [OFF]: { toggle: ON, //如果当前状态是OFF,执行toggle操作会进入ON状态 message: 'The machine is currently off.' //如果状态是OFF,输出此信息 }, [ON]: { toggle: OFF, //如果当前状态是ON,执行toggle操作会进入OFF状态 message: 'The machine is currently on.' //如果状态是ON,输出此信息 } }; //定义当前状态,默认是OFF状态 let currentState = OFF; //定义操作函数,传入操作名 function operate(op) { //如果对应状态没有此操作,输出错误 if (!fsm[currentState][op]) { console.log('Error: invalid operation'); return; } //获取下一个状态 const nextState = fsm[currentState][op]; //输出信息 console.log(fsm[nextState].message); //修改当前状态为下一个状态 currentState = nextState; } //使用操作函数 operate('toggle'); //输出The machine is currently on. operate('toggle'); //输出The machine is currently off. operate('invalidOp'); //输出Error: invalid operation
以上代码中,我们定义了两个状态OFF
和ON
,使用状态转移表fsm
来确定操作后的下一个状态以及要输出的信息。使用operate()
函数来执行不同的操作,同时更新当前状态并输出相应信息。