Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions Observer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// 将观察者放在闭包中,当页面加载就立即执行
var Observer = (function(){
// 防止消息队列暴漏而被篡改故将消息容器作为静态私有变量保存
var __messages = {};
return {
// 注册信息接口
regist : function (type, fn){
// 如果些消息不存在则应该创建一个该消息类型
if(typeof __messages[type] === 'undefined'){
__messages[type] = [fn];
} else {
// 将动作推入到消息对应的动作执行队列中
__messages[type].push(fn);
}
},
// 发布信息接口
fire : function(type, args){
// 如果消息没有被注册,则返回
if(!__messages[type]){
return;
}
// 定义消息信息
var events = {
type : type,
args : args || {}
},
i = 0,
len = __messages[type].length;
// 遍历消息动作
for(; i < len; i++){
// 依次执行注册的消息对应的动作序列
__messages[type][i].call(this, events);
}
},
// 移除信息接口
remove : function(type, fn){
// 如果消息动作队列存在
if(__messages[type] instanceof Array){
// 从最后一个消息动作遍历
var i = __messages[type].length - 1;
for(; i >= 0; i--) {
// 如果存在该动作则在消息动作序列中移除相应动作
__messages[type][i] === fn && __messages[type].splice(i, 1);
}
}
}
}
})()
86 changes: 86 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>My diary</title>
</head>
<body>
<script src="Observer.js"></script>
<script>
const DIARY_TITLE = '周末时光';
const DIARY_TIME = new Date('2019/06/24');
const WEATHER = '晴';

let plan = {
"0600": "起床",
"0630": "跑步",
"0730": "吃早餐",
"0800": "打代码",
"0930": "看电视",
"1030": "逛超市",
"1130": "下厨房做美食",
"1400": "午休",
"1600": "玩游戏",
"1800": "午餐",
"2000": "游泳或珠江边散步",
"1000": "看书",
"2300": "睡觉",
}
class MyPlan {
constructor(plan) {
this.plan = plan;
this.start();
}
// 开始
start() {
Object.keys(this.plan).forEach((timeNode) => {
Observer.regist(timeNode, () => {
console.log(this.plan[timeNode])
})
});
this.fire();
}
fire() {
let hours = new Date().getHours();
let minutes = new Date().getMinutes();
hours = hours.length > 1 ? hours : `0${hours}`;
minutes = minutes.length > 1 ? minutes : `0${minutes}`;
let currentTime = `${hours}${minutes}`;
setTimeout(() => {
Observer.fire(currentTime);
this.fire();
}, 1000)
}
// 增加计划
addPlan(timeNode, desc) {
if (this.plan[timeNode]) {
console.log('已经有计划');
return
}
Observer.regist(time, () => {
console.log(desc)
})
}
// 删除计划
delPlan(timeNode) {
const plan = this.plan[timeNode];
if (this.plan[timeNode]) {
delete this.plan[timeNode];
console.log(`已删除一个 ${plan} 计划`)
}
}
}

var oneDay = new MyPlan(plan);
// 起晚了
console.log('滴滴滴,睡过头了');
// 删除两个计划
oneDay.delPlan('0600');
oneDay.delPlan('0630');
</script>

</body>
</html>