发表于: 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的样式,也可以正常运行。
收获: 代码还是敲出来的,准备放弃看书,用到哪学到哪,最后看书查缺补漏。
评论