LazyMan

参考:http://web.jobbole.com/89626/


题目:


实现一个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

以此类推。



思路

关键是输出的顺序,以及需要在每一个任务执行完再执行下一步,类似promise,使用队列也可以。链式调用则要求每个方法都得返回当前对象。


代码

var LazyMan = function(name) {
    if (!(this instanceof LazyMan)) {
        return new LazyMan(name);
    }
    this.quene = [];
    var self = this;
    var fn = function() {
        console.log('Hi! This is ' + name);
        self.next();
    };
    this.quene.push(fn);
    setTimeout(function() {
        self.next();
    }, 0);
}
LazyMan.prototype = {
    next: function() {
        if (this.quene.length) {
            var fn = this.quene.shift();
            if ((typeof fn).toLowerCase() === 'function') {
                fn();
            }
        }
    },
    sleep: function(time) {
        var self = this;
        var fn = function() {
            setTimeout(function() {
                console.log('Wake up after ' + time);
                self.next();
            }, time * 1000);
        };
        this.quene.push(fn);
        return this;
    },
    sleepFirst: function(time) {
        var self = this;
        var fn = function() {
            setTimeout(function() {
                console.log('Wake up after ' + time);
                self.next();
            }, time * 1000);
        };
        this.quene.unshift(fn);
        return this;
    },
    eat: function(food) {
        var self = this;
        var fn = function() {
            console.log('Eat ' + food + '~');
            self.next();
        };
        this.quene.push(fn);
        return this;
    }
};




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值