资讯专栏INFORMATION COLUMN

LazyMan

Winer / 2152人阅读

实现函数LazyMan,使得:

LazyMan("Hank"); 输出
Hi Hank!

LazyMan("Hank").eat("dinner");输出
Hi Hank!
Eat dinner!

LazyMan("Hank").sleep(5).eat("dinner"); 输出
Hi Hank!
//等待五秒
Eat dinner!

LazyMan("Hank").sleepFirst(5).eat("dinner");输出
//等待五秒
Hi Hank!
Eat dinner!

实现代码:


function LazyMan(name) {
    lp.taskList.push("Hi " + name + "!");
    return lp.exe();
}

var lp = LazyMan.prototype;

lp.taskList = [];     

lp.eat = function(v) {
    lp.taskList.push("Eat " + v + "!");
    return lp.exe();
}


lp.sleep = function(t) {
    lp.taskList.push("sleep " + t);
    return lp.exe();

}

lp.sleepFirst = function(t) {
    lp.taskList.unshift("sleep " + t);
    return lp.exe();
}

lp.taskStart = false;

lp.exe = function() {
    var that = this;
    if(!lp.taskStart) {
        lp.taskStart = true;
        setTimeout(function() {
            doTask(lp.taskList);
            that.taskList = [];
        }, 0);
    }
    return lp;
}


function doTask(taskList) {
    if(taskList.length) {
        var task = taskList.shift();
        if(task.indexOf("sleep") !== -1) {
            var match = task.split(" ");
            var t = parseInt(match[1]);
            setTimeout(function(){
                doTask(taskList);
            }, t * 1000);
        } else {
            console.log(task);
            doTask(taskList);
        }
    }
}

// LazyMan("Hank");
// LazyMan("Hank").eat("dinner");
// LazyMan("Hank").sleep(5).eat("dinner");
LazyMan("Hank").sleepFirst(5).eat("dinner");


文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88183.html

相关文章

  • 实现Lazyman

    摘要:前言之前在掘金上到一篇文章关于微信面试的文章,其中提到了手动实现的问题。看起来好像挺有趣的,我们来分析以下分析首先我们看到例子有几个特点,一个是我们调用的时候不需要用到关键字,这意味着我们需要使用工厂函数另一个是要我们实现链式调用。 前言 之前在掘金上到一篇文章关于微信面试的文章,其中提到了手动实现Lazyman的问题。刚开始看到Lazyman我是一脸懵逼的,这是什么鬼,后来查了查了一...

    Tonny 评论0 收藏0
  • 关于lazyman你还应该知道这几件事

    摘要:首先我们来讲这个栈在中,每当有函数被执行的时候都会在当前的执行堆栈中创建一个新的堆栈帧,并放到栈顶。因为是链式调用,所以代码一直在同一个作用于中执行,也就是说当前的堆栈帧一直没有被移出栈。 前言 前几天在稀土上看到一篇面试的帖子,里面微信有一道题是lazyman的实现,具体要做的事情就是 LazyMan(Hank) //Hi! This is Hank! LazyMan(Hank)....

    未东兴 评论0 收藏0
  • 如何实现一个 LazyMan?

    摘要:实现一个,可以按照以下方式调用输出输出等待秒输出输出等待秒以此类推。这是典型的流程控制,问题的关键是如何实现任务的顺序执行。 实现一个LazyMan,可以按照以下方式调用: LazyMan(Hank)输出: Hi! This is Hank! LazyMan(Hank).sleep(10).eat(dinner)输出 Hi! This is H...

    diabloneo 评论0 收藏0
  • 如何实现一个 LazyMan?

    摘要:实现一个,可以按照以下方式调用输出输出等待秒输出输出等待秒以此类推。这是典型的流程控制,问题的关键是如何实现任务的顺序执行。 实现一个LazyMan,可以按照以下方式调用: LazyMan(Hank)输出: Hi! This is Hank! LazyMan(Hank).sleep(10).eat(dinner)输出 Hi! This is H...

    frank_fun 评论0 收藏0
  • LazyMan代码实现

    摘要:只需要返回对象本身就可以了。这里只实现一个示例实现链式调用从队列头部插入最后一步封装还有一个大家可以来试一试。如果有想法的话欢迎提出大家交流一下 ES5实现LazyMan lazyman主要原理是: 需要一个队列保存将要用到的事件 利用闭包将事件保存至队列中 创建一个中间件next用来触发事件 链式调用 使用lazyman需要实现的场景: LazyMan(Tom); // my n...

    yhaolpz 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<