LazyMan 实现...

// 实现一个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 Cp {
  constructor(name) {
    this.tasks = [];
    const task = (name => _ => {
      console.log(`Hi! This is ${name}!`);
      this.next();
    })(name);
    this.tasks.push(task);
    setTimeout(_ => {
      this.next();
    })
  }

  next() {
    const task = this.tasks.shift();
    task && task();
  }

  eat(food) {
    const task = (food => _ => {
      console.log(`Eat ${food}~`);
      this.next();
    })(food);
    this.tasks.push(task);
    return this;
  }

  sleep(wait) {
    const task = (wait => _ => {
      setTimeout(_ => {
        console.log(`Wake up after ${wait}`);
        this.next();
      }, wait * 1000);
    })(wait);
    this.tasks.push(task);
    return this;
  }

  sleepFirst(wait) {
    const task = (wait => _ => {
      setTimeout(_ => {
        console.log(`Wake up after ${wait}`);
        this.next();
      }, wait * 1000);
    })(wait);
    this.tasks.unshift(task);
    return this;
  }
}

function LazyMan(name) {
  return new Cp(name);
}

LazyMan('hank').sleep(3).eat('dog').eat('chicken').sleepFirst(5);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目介绍 实现一个 LazyMan,可以按照以下方式调用:LazyMan("Hank") 输出:Hi! This ...
    调皮的小卷羊阅读 619评论 1 0
  • http://web.jobbole.com/89626/ 实现一个LazyMan,可以按照以下方式调用:Lazy...
    永恒不灭的梦想阅读 994评论 0 0
  • 实现一个 LazyMan,可以按照以下方式调用:LazyMan("Hank")输出:Hi! This is Han...
    McDu阅读 368评论 0 0
  • 一、题目介绍 以下是我copy自网上的面试题原文: 实现一个LazyMan,可以按照以下方式调用:LazyMan(...
    我_是leon阅读 13,909评论 7 39
  • 实现一个LazyMan,可以按照以下方式调用:LazyMan(“Hank”)输出:Hi! This is Hank...
    TX_30b6阅读 224评论 0 0