美文网首页
02.数据和方法

02.数据和方法

作者: Pilihou | 来源:发表于2021-06-08 11:01 被阅读0次

    除了状态转换动作之外, 状态机还可以包含任意数据和方法:

      var fsm = new StateMachine({
        init: 'A',
        transitions: [
          { name: 'step', from: 'A', to: 'B' }
        ],
        data: {
          color: 'red'
        },
        methods: {
          describe: function() {
            console.log('I am ' + this.color);
          }
        }
      });
    
      fsm.state;      // 'A'
      fsm.color;      // 'red'
      fsm.describe(); // 'I am red'
    

    数据和状态机工厂

    如果要从状态机工厂创建多个实例,然后data对象将在它们之间共享。这肯定不是你想要的!若要确保每个实例获得唯一数据,应使用一个data方法来替换:

      var FSM = StateMachine.factory({
        init: 'A',
        transitions: [
          { name: 'step', from: 'A', to: 'B' }
        ],
        data: function(color) {      //  <-- 使用一个能被每个实例调用的方法
          return {
            color: color
          }
        },
        methods: {
          describe: function() {
            console.log('I am ' + this.color);
          }
        }
      });
    
      var a = new FSM('red'),
          b = new FSM('blue');
    
      a.state; // 'A'
      b.state; // 'A'
    
      a.color; // 'red'
      b.color; // 'blue'
    
      a.describe(); // 'I am red'
      b.describe(); // 'I am blue'
    

    注意:构造每个实例时使用的参数会直接传递给data方法。

    相关文章

      网友评论

          本文标题:02.数据和方法

          本文链接:https://www.haomeiwen.com/subject/icdzsltx.html