发表于: 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到了如果在一个东西上面停滞太久,可以去看看师兄分享的小课堂的技能,感谢其勇师兄,@刘其勇师兄棒棒哒~
评论