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~

实现代码:

var task = [];

function next() {
    if(task && task.length > 0) {
        task.shift()();
    }
}

function lazyMan(a) {
    setTimeout(next, 0);
}

function LazyMan(a) {
    task = [];
    return new lazyMan().init(a);
}
lazyMan.prototype = {
    init: function(a) {
        var fn = function() {
            console.log("Hi! This is " + a + "!");
            next();
        }
        task.push(fn);
        return this;
    },
    sleep: function(t) {
        var fn = function() {
            setTimeout(function() {
                console.log("Wake up after " + t);
                next();
            }, t * 1000);
        }
        task.push(fn);
        return this;
    },
    eat: function(d) {
        var fn = function() {
            console.log("Eat " + d + "~");
            next();
        }
        task.push(fn);
        return this;
    },
    sleepFirst: function(t) {
        var fn = function() {
            setTimeout(function() {
                console.log("Wake up after " + t);
                next();
            }, t * 1000);
        }
        task.unshift(fn);
        return this;
    }
}

 

代码实现的思考:

1.JavaScript流程控制实现需要利用中间件原理;

2.JavaScript利用return this实现链式调用;

posted @ 2017-02-04 15:05  洛河  阅读(236)  评论(0编辑  收藏  举报