实现一个LazyMan,可以按照以下方式调用:
LazyMan(“Hank”)输出:
Hi! This is Hank!
LazyMan(“Hank”).sleep(10).eat(“dinner”)输出
Hi! This is Hank!
//等待10秒..
Wake up after 10
Eat dinner~
LazyMan(“Hank”).eat(“dinner”).eat(“supper”)输出
Hi This is Hank!
Eat dinner~
Eat supper~
LazyMan(“Hank”).sleepFirst(5).eat(“supper”)输出
//等待5秒
Wake up after 5
Hi This is Hank!
Eat supper
class Man {
constructor(name) {
this.actions = [];
const hello = () => {
console.log(`Hi This is ${name}!`);
this.next();
};
this.addAction(hello);
setTimeout(() => {
this.next();
}, 0);
}
next() {
if (this.actions.length > 0) {
const fn = this.actions.shift();
if ((typeof fn).toLowerCase() === 'function') {
fn();
}
}
}
addAction(func, isFirst) {
if (!isFirst) {
this.actions.push(func);
} else {
this.actions.unshift(func);
}
}
eat(food) {
const eatFunc = () => {
console.log(`Eat ${food}~`);
this.next();
};
this.addAction(eatFunc);
return this;
}
sleep(time) {
const sleepFn = () => {
setTimeout(() => {
console.log(`Wake up after ${time}ms`);
this.next();
}, time);
};
this.addAction(sleepFn);
return this;
}
sleepFirst(time) {
const sleepFirst = () => {
setTimeout(() => {
console.log(`Wake up after ${time}ms`);
this.next();
}, time);
};
this.addAction(sleepFirst, true);
return this;
}
}
function LazyMan(name) {
return new Man(name);
}
参考:
https://www.cnblogs.com/XHappyness/p/12212790.html
https://www.cnblogs.com/EnSnail/p/9866130.html
网友评论