猿问

想要实现一个class Lazing 函数,输出如下该怎么写?

Lazing('Garry')// 输出 'hello Garray'Lazing('Garry').sleep(10).eat('rice')// 输出 'hello Garray'// 等待10秒...// 输出 'eating rice'Lazing('Garry').eat('rice').eat('bread')// 输出 'eating rice'// 输出 'eating bread'Lazing('Garry').sleepFirst(5).eat('rice')// 等待5秒...// 输出 'hello Garray'// 输出 'eating rice'

难点是定时器该怎么处理?如果sleepFirst定时器是后置的怎么来实现?

Lazing('Garry').eat('rice').sleepFirst(5)// 等待5秒...// 输出 'hello Garray'// 输出 'eating rice'


慕神8447489
浏览 465回答 2
2回答

12345678_0001

粗略的demo,定时器放在后面老衲一时想不通,此demo按顺序执行var Lazing2 = function(name){    return {        _name : name,        _food : [],        _timeLimit : 0,        eat : function(food){            var _this = this;             setTimeout(function(){                console.log(_this._name,'吃',food)             },_this._timeLimit*1000);            return _this         },        delay : function(time){            var _this = this;             _this._timeLimit = time;            return _this;         }     } } Lazing2("老衲").eat('蛋糕').delay(3).eat('屎');

三国纷争

总体思路就是 构造一个任务队列class&nbsp;Lazing&nbsp;{&nbsp;&nbsp;constructor(item&nbsp;=&nbsp;'')&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;this.queue&nbsp;=&nbsp;[{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key:&nbsp;'init',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('hello&nbsp;'&nbsp;+&nbsp;item) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}] &nbsp;&nbsp;} &nbsp;&nbsp;eat(item)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;this.queue.push({ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key:&nbsp;'eat',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('eating&nbsp;'&nbsp;+&nbsp;item) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;})&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this &nbsp;&nbsp;} &nbsp;&nbsp;sleep(time)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;this.queue.push({ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key:&nbsp;'sleep',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val:&nbsp;time&nbsp;*&nbsp;1000 &nbsp;&nbsp;&nbsp;&nbsp;})&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this &nbsp;&nbsp;} &nbsp;&nbsp;sleepFirst(time)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;this.queue.unshift({ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key:&nbsp;'sleep',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val:&nbsp;time&nbsp;*&nbsp;1000 &nbsp;&nbsp;&nbsp;&nbsp;})&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;this &nbsp;&nbsp;} &nbsp;&nbsp;exec()&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;this.queue.length;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;key&nbsp;=&nbsp;this.queue[i]['key'] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;val&nbsp;=&nbsp;this.queue[i]['val']&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(key&nbsp;===&nbsp;'sleep')&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.queue.shift() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(this.exec.bind(this),&nbsp;val)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;val()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.queue.shift() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i-- &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;} }不过调用方式稍微不一样些,但能达到效果new&nbsp;Lazing('Garry').exec()new&nbsp;Lazing('Garry').sleep(3).eat('rice').exec()new&nbsp;Lazing('Garry').eat('rice').eat('bread').exec()new&nbsp;Lazing('Garry').sleepFirst(3).eat('rice').exec()new&nbsp;Lazing('Garry').eat('rice').sleepFirst(3).exec()
随时随地看视频慕课网APP
我要回答