美文网首页
LazyMan的实现

LazyMan的实现

作者: 调皮的小卷羊 | 来源:发表于2017-08-30 12:24 被阅读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

解题思路

首先记录所需要执行的任务,存放在一个任务队列中,当记录完成后,开始执行任务队列。

        function LazyMan(name) {
            var taskList = []
            var task = { // 动作
                wait(second) { //  等待
                    return () => {
                        console.log(`Wake up after ${second}`)
                        setTimeout(() => {
                            next()
                        }, second * 1000)
                    }
                },
                eat(part) { // 吃
                    return () => {
                        console.log(`Eat ${part}~`)
                        next()
                    }
                },
                say() { // 说
                    console.log(`Hi! This is ${name}!`)
                    next()
                }
            }

            taskList.push(task.say)

            let next = () => { // 执行下一件任务
                var fn = taskList.shift()
                fn && fn.call()
            }

            setTimeout(function () {  // 记录任务完成,开始执行任务
                next()
            }, 0)

            return { // 暴露接口
                sleep(second) {
                    taskList.push(task.wait(second))
                    return this
                },
                sleepFirst(second) {
                    taskList.unshift(task.wait(second))
                    return this
                },
                eat(part) {
                    taskList.push(task.eat(part))
                    return this
                }
            }
        }

相关文章

  • js重点与难点(转)

    javascript LazyMan实现LazyMan(什么是LazyMan?请自行google)function...

  • LazyMan的实现

    题目介绍 实现一个 LazyMan,可以按照以下方式调用:LazyMan("Hank") 输出:Hi! This ...

  • lazyman

    实现一个LazyMan,可以按照以下方式调用:LazyMan(“Hank”)输出:Hi! This is Hank...

  • LazyMan 实现...

    // 实现一个LazyMan,可以按照以下方式调用:// LazyMan(“Hank”)输出:// Hi! Thi...

  • 实现一个LazyMan

    实现一个 LazyMan,可以按照以下方式调用:LazyMan("Hank")输出:Hi! This is Han...

  • lazyman 实现

    function _lazyman(name) {this.tasks = [];var self = this;...

  • 实现lazyMan

    涉及的知识点: 流程控制:创建task任务队列,使用push、shift、unshift方法操作任务 闭包:当闭包...

  • LazyMan 自己的笨办法

    LazyMan 自己的笨办法 看了LazyMan,先用自己的笨办法写了个,只是为了实现功能,其他要求都没达到 本人...

  • LazyMan的深入解析和实现

    一、题目介绍 以下是我copy自网上的面试题原文: 实现一个LazyMan,可以按照以下方式调用:LazyMan(...

  • Lazyman的两种实现方式

    实现一个LazyMan, 可以按下列方式调用: 方式一: 方式二:

网友评论

      本文标题:LazyMan的实现

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