LazyMan Myth丶恋晨 2022-07-11 15:26 112阅读 0赞 参考:[http://web.jobbole.com/89626/][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; } }; [http_web.jobbole.com_89626]: http://web.jobbole.com/89626/
相关 LazyMan 参考:[http://web.jobbole.com/89626/][http_web.jobbole.com_89626] 题目: > 实现一个L Myth丶恋晨/ 2022年07月11日 15:26/ 0 赞/ 113 阅读
相关 面试题 LazyMan 的Rxjs实现方式 前言 笔者昨天在做某公司的线上笔试题的时候遇到了最后一道关于如何实现LazyMan的试题,题目如下 > 实现一个LazyMan,可以按照以下方式调用: > Lazy 川长思鸟来/ 2022年04月10日 14:16/ 0 赞/ 191 阅读
相关 如何实现一个 LazyMan? 网上看到一道 JavaScript 笔试题,感觉还挺有意思的,在此记录一番。 考察知识点:闭包,事件轮询机制,链式调用,队列 实现一个LazyMan,可以按照以下方 冷不防/ 2022年01月19日 00:35/ 0 赞/ 213 阅读
还没有评论,来说两句吧...