zoukankan      html  css  js  c++  java
  • 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 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);
    }
    
  • 相关阅读:
    数组的排序
    2017-2018学年实习心得
    2017-2018学年实习总结
    古人警句
    课程意见
    第二次冲刺第十天
    第二次冲刺第九天
    第二次冲刺第八天
    第二天冲刺第七天
    第二次冲刺第六天
  • 原文地址:https://www.cnblogs.com/XHappyness/p/12212790.html
Copyright © 2011-2022 走看看