发表于: 2017-05-11 22:52:07

1 947


今天完成的事情:

    看了北京师兄刘其勇的关于状态机的视频,终于对于状态机有了一些理解。

    能结合之前看书中的知识,理解了一下状态机触发的原理。this/对象等。

    开始写任务4

  

明天计划的事情

    继续任务4

    我准备先处理每天内的四个小步骤,然后在处理天数的循环。

 

    

遇到的问题:

  1. 看完了高程中的面向对象编程,感觉还是一脸蒙蔽,这些东西都该怎么用,慢慢摸索吧,后面不准备看书了,没有实践的话,这些书里的知识很难理解透彻。

  

  2. 之前看的阮一峰官网的有限状态机的文档,看完了似懂非懂的,了解很不清楚,今天看了刘其勇师兄的讲解,思路终于清楚了。

    我做的demo是一个人的生或者死,比较简单。

       状态总数(state)是有限的。  (只有两种,生或者死)

       任一时刻,只处在一种状态之中。(要么这个人一直在死的状态,要么这个人一直在活着的状态)

    某种条件下,会从一种状态转变(transition)到另一种状态。(onclick触发这个人的生死)

    所谓有限状态机就是一个对象,按照设置的顺序,依次触发内部的条件。(我理解的,可能不对)   

   看下面的代码,从最后onclick触发函数说起。

var foot = document.getElementById("foot");      
var switchstate = {
   // 当前状态
   currentState: 'live',                             最初这个人是活着的
   // 状态转换
   trans: function(){                                第三步 执行trans函数

        switch(this.currentState) {                     第四步  将switchstate的currentState的作为参数条件进行判断。             

              case "live":                          第五步  currentState符合“live”的条件,所以执行将currentState改为死,并将一个div的背景颜色改了 

                this.currentState = 'dead';
                div.style.backgroundColor = "green";
                 break;

              case "dead":                         可能的第五步   currentState符合“dead”的条件,输出一句话。               

                alert("此人已经死亡,请选择其他人");

                 break;
              default:
                  console.log('Invalid State!');
                 break;
        }
   },
   //绑定事件
   event:function(){this.trans()}                         第二步  执行event方法,此处this就是event所处的环境,也就是switchstate,所以触发了trans函数。    
};
foot.onclick = function () { switchstate.event()};               第一步 onclick触发 switchstate是一个对象,event是它的一个方法。 

     

       3.有一个加载顺序的问题

        CSS放在头部里,JS放在body最后的部分,按道理来说应该先加载CSS文件,再加载JS文件。

      今天用JS里的for循环插入了几个div,我原来以为必须在JS中设置这些DIV的样式,在CSS中设置是无效的,因为CSS加载的时候,设置样式的DIV还没有出现,但是后来尝试发现,在CSS中设置div的样式,也可以正常运行。


收获:  代码还是敲出来的,准备放弃看书,用到哪学到哪,最后看书查缺补漏。

 



返回列表 返回列表
评论

    分享到