发表于: 2017-04-06 22:04:45

2 1169


一,今天完成的事情

(1)老大在日报里面提醒去看一下北京刘其勇师兄分享的有限状态机,早上看了其勇师兄的视频,听了北京分院师兄们的讨论,还有老大的指点,分分钟就get到了精髓呀!简直是救星来的,看完立马试了下上面的例子,更加理解了有限状态机的操作流程,我的理解是

1.有限个状态。

2.有事件能让状态切换。

3.尽量能复用。

能复用这块不是特别清楚,又看了下其勇师兄的参考文献《Javascript高级程序设计》中的面对对象程序设计,了解了

工厂模式(接受参数每次新建一个对象);

’构造函数模式(每次也是创建新对象,但是是将构造函数的作用域赋给新对象,还是需要传参);

原型模式(利用原型(prototype属性)将原型中的属性指向实例)。

看完之后我觉得怎么保存步骤的问题也就迎刃而解了,将该天数完成的步骤或者说状态,保存为原型(days)的一个实例(day1),然后本地存储,页面切换回来之后就调用。

之前都没用到有限状态机的精髓,于是又重新分析了下游戏,打算尽量多的用有限状态机写,让逻辑更清晰。感觉原型模式(因为之前摸索过pyhton的面对对象编程,觉得这个比较类似)最犀利,用原型模式+有限状态机重新写。

(2)用原型模式+有限状态机写了第几天点击展开,再点击收起,code如下。

//实现点击展开,再点收起的有限状态机
function Button() {

}
Button.prototype = {
//当前状态
   currentState : "open",
//    绑定事件
   initialize : function(a) {
this.transition(a);
   },
   transition : function(a) {
switch(this.currentState) {
case "open":
this.currentState = "close";
               a.parentNode.className = "dropdown";
               break;
           case "close":
this.currentState = "open";
               a.parentNode.className = "open dropdown";
               break;
           default:
console.log("Invalid State")
}
}
};

(3)重新点击步骤(未完成),code如下:

Step.prototype = {
//当前状态,杀人步骤
   currentState: "killer",
//    绑定事件,加一些函数
   initialize: function(a) {
var m;
       var object1 = {};
       this.transition(a);
       //抓取父元素的元素节点
       for (var x = 0,i = 0;x < a.parentNode.childNodes.length;x++) {
if (a.parentNode.childNodes[x].nodeType == 1) {
object1[i] = a.parentNode.childNodes[x];
               i++;
           }
}
console.log(object1);
       //抓取a在父元素的子元素中的第几个
       for (var y = 0;y < btns.length;y++) {
if (btns[y].innerHTML == a.innerHTML) {
m = y;
               console.log(m);
           }
}
},
   //改变背景色函数
   color: function(a) {
a.style.background = "#83b09a";
       },
//    请进行下一项活动
   pls_next: function(a) {
a.onclick = function() {
confirm("请进行下一项活动");
       }
},
//    转换状态
   transition: function(a) {
switch (this.currentState) {
case "killer":
this.currentState = "dead";
               this.color(a);
               this.pls_next(a);
               break;
           case "dead":
this.currentState = "speach";

               break;
           case "speach":
this.currentState = "vote";

               break;
           case "vote":
this.currentState = "vote";
               break;
       }
}
};

二,明天要做的事情

完成任务四的JS版本。

三,遇到的问题

不知道保存为实例,传参存储的想法对不对。

四,收获

1.了解了下JS的面对对象编程(顺道准备了一波PPT,可以的)

2.状态机真的掌握了,有种把到妹的感觉,莫名其妙就很嗨。。。。

3.最重要的是,get到了如果在一个东西上面停滞太久,可以去看看师兄分享的小课堂的技能,感谢其勇师兄,@刘其勇师兄棒棒哒~



返回列表 返回列表
评论

    分享到