• 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);
    }
    
  • 相关阅读:
    Windows 7 X64位平台下,VC6调试运行程序,中断调试无法退出
    在Windows中安装MinGW-w64(有图,一步一步)
    自我修养
    Core 事件总
    异步消息
    微信小程序
    安装Zookeeper集群
    Linux删除非空目录
    adoop集群动态添加和删除节点
    安装和配置hadoop集群步骤
  • 原文地址:https://www.cnblogs.com/XHappyness/p/12212790.html
Copyright © 2020-2023  润新知