美文网首页
实现一个LazyMan

实现一个LazyMan

作者: 指尖跳动 | 来源:发表于2020-02-18 10:01 被阅读0次

    实现一个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

    相关文章

      网友评论

          本文标题:实现一个LazyMan

          本文链接:https://www.haomeiwen.com/subject/snnwfhtx.html