简易的lazyman实现

来源:互联网 发布:王吴悠是什么梗 知乎 编辑:程序博客网 时间:2024/06/07 15:27

function LazyManHocks(name){
    this.tasks=[];
    var self=this;
    var fun=(function(n){
        return function(){
            var name=n;
            console.log("Hi,This is "+name);
            self.next();
        }
    })(name)
    this.tasks.push(fun);
   setTimeout(function(){
       self.next();
   },0);


}
LazyManHocks.prototype.next=function(){
   var fun=this.tasks.shift();
    fun && fun();
    return this;
}


LazyManHocks.prototype.eat=function(food){
      var self=this;
    var fun=(function(food){
            return function(){
                console.log("I just eat "+food);
                self.next();
            }
    })(food)
    this.tasks.push(fun);
    return this;
}
LazyManHocks.prototype.sleep=function(time){
    var self=this;
    var fun=(function(time){
        return function(){
            setTimeout(function(){
                console.log("I sleep  "+time+"seconds");
                self.next();
            },time*1000);


        }
    })(time)
    this.tasks.push(fun);
    return this;
}


function LazyMan(name){
    return new LazyManHocks(name);

}


LazyMan("kasol").eat("pizza").eat("cake").sleep(5);

//执行结果



大概思想就是将要执行的动作放在一个队列里面, LazyManHocks很重要,里面的关键就是

 setTimeout(function(){
       self.next();
   },0);

这句话保证了所有动作进入队列后才执行异步队列里的next方法,还值得注意的就是this的指向,这里用到了闭包,所以需要将this赋值给self,保证在调用next方法的时候,里面的this指向LazyManHocks的实例而不是window


0 0
原创粉丝点击