当前位置: 首页 > news >正文

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
以此类推。

简单实现

function lazyman(name) {
    return new lazyman.fn.init(name);
}

lazyman.fn = lazyman.prototype = {
    construct: lazyman,
    stack: null,
    status: 0,
    init: function (name) {
        this.name = name;
        this.stack = [];

        return this;
    },
    sleep: function (time) {
        var that = this;
        time = +time;
        if(time !== time) {
            this.next();
        } else if(this.status) {
            this.stack.unshift(this.sleep.bind(this, time));
        } else {
            this.status = 1;
            this.print(`sleeping ${time} seconds...`);

            setTimeout(function () {
                that.status = 0;
                that.next();
            }, time * 1000);
        }
        return this;
    },
    next: function () {
        while(this.status == 0 && this.stack.length) {
            this.print(
                this.stack.pop()()
            );
        }
        return this;
    },
    eat: function(thing) {
        this.stack.unshift(lazyEat.bind(null, this.name, thing));
        if(this.status == 0) {
            this.next();
        }
        return this;
    },
    print: console.log
}

lazyman.fn.init.prototype = lazyman.fn;

function lazyEat(name, thing) {
    return `${name} eat ${thing}`;
}

module.exports = lazyman;

转载于:https://www.cnblogs.com/ende93/p/6296083.html

相关文章:

  • 数学征途
  • 控制面板快捷方式大全
  • .NET与 java通用的3DES加密解密方法
  • 学习Java--JDK的下载安装和配置
  • 掘金吉祥物设计全过程(内幕揭秘)
  • Asp.net MVC 示例项目Suteki.Shop分析之---Controller
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • 图书馆的借阅书刊的案例 UML Modelling
  • text段,data段,bss段,堆和栈
  • Ie8下运行的页面居中显示的问题
  • copy.c实现
  • SQl 语句(常见) 新建,删除,修改表结构
  • CCF201609-1 最大波动(100分)
  • SQL不重复记录
  • Ruby 2.x 源代码分析:扩展 概述
  • eclipse的离线汉化
  • Facebook AccountKit 接入的坑点
  • HashMap剖析之内部结构
  • Java的Interrupt与线程中断
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Next.js之基础概念(二)
  • SQLServer之索引简介
  • Vue 动态创建 component
  • vue.js框架原理浅析
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 复习Javascript专题(四):js中的深浅拷贝
  • 我从编程教室毕业
  • 一、python与pycharm的安装
  • 一文看透浏览器架构
  • ​水经微图Web1.5.0版即将上线
  • #ifdef 的技巧用法
  • #NOIP 2014# day.1 T2 联合权值
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • ${ }的特别功能
  • (12)Linux 常见的三种进程状态
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (二)学习JVM —— 垃圾回收机制
  • (二十三)Flask之高频面试点
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • . Flume面试题
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .net core控制台应用程序初识
  • .Net mvc总结
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • ??myeclipse+tomcat
  • @EventListener注解使用说明
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [1181]linux两台服务器之间传输文件和文件夹
  • [Codeforces1137D]Cooperative Game
  • [Flexbox] Using order to rearrange flexbox children