用闭包封装状态和行为、原型链共享方法可实现轻量可复用无污染的状态机:闭包私有化state和handlers,原型挂载getState/transition/on等复用方法,支持事件监听、链式调用与插件扩展。

<p>用闭包封装状态和行为,再通过原型链共享方法,就能实现一个轻量、可复用、无全局污染的状态机。</p>
<H3>状态私有化:用闭包保存当前状态和配置</H3>
<p>构造函数内部用变量保存 <strong>state</strong> 和可选的初始配置,外部无法直接访问或修改,避免状态被意外篡改。</p>
<p>例如:</p>
<font color="#666">function StateMachine(initialState) {<br> let state = initialState;<br> const transitions = {};<br> // 其他私有逻辑……<br>}</font>
<H3>方法挂载到原型:复用逻辑,节省内存</H3>
<p>把通用操作(如 <strong>getState</strong>、<strong>transition</strong>、<strong>on</strong>)定义在原型上,所有实例共享同一份函数,不重复创建。</p>
<p>关键点:</p>
<ul>
<li><strong>transition</strong> 方法内部仍能访问闭包中的 <strong>state</strong> 和 <strong>transitions</strong>,因为它是从构造函数作用域内返回的绑定函数</li>
<li>原型方法通过 <strong>this</strong> 调用闭包内返回的私有方法(如 <strong>this._setState</strong>),保持封装性</li>
</ul>
<H3>支持事件监听:用闭包维护 handlers 映射表</H3>
<p>在构造函数中声明 <strong>handlers = {}</strong>,配合 <strong>on(event, fn)</strong> 和 <strong>emit(event)</strong> 实现状态变更通知。</p>
<p>这样每个实例独立维护自己的监听器,互不影响。比如:</p>
<font color="#666">this.on('enter:idle', () => console.log('进入空闲'));<br>this.transition('idle');</font>
<H3>链式调用与可扩展性设计</H3>
<p>每个状态变更方法(如 <strong>transition</strong>)返回 <strong>this</strong>,支持链式写法;同时预留 <strong>use(plugin)</strong> 接口,方便注入日志、持久化等能力。</p>
<p>插件本质是接收实例并扩展其私有数据或方法,不破坏原有封装结构。</p>