摘要:只需要返回对象本身就可以了。这里只实现一个示例实现链式调用从队列头部插入最后一步封装还有一个大家可以来试一试。如果有想法的话欢迎提出大家交流一下
ES5实现LazyMan
lazyman主要原理是:
需要一个队列保存将要用到的事件
利用闭包将事件保存至队列中
创建一个中间件next用来触发事件
链式调用
使用lazyman需要实现的场景:
LazyMan("Tom"); // my name is Tom! LazyMan("Tom").eat("Pissa"); // my name is Tom! // Eat Pissa ~ LazyMan("Tom").eat("Pissa").sleep(2); // my name is Tom! // Eat Pissa ~ // WakeUp after 2s ! LazyMan("Tom").wekeup(2).eat("Pissa"); // getup after 2s ! // my name is Tom // Eat Pissa
核心代码实现:
需要创建一个数组当做队列使用
function _LazyMan(name) { // 事件存储队列 this.tasks = []; // 绑定this指向 var _this = this; // 使用闭包 var fn = (function(n) { // 绑定作用域 var name = n; return function(name) { console.log("my name is "+ name); _this.next(); } })(name); this.tasks.push(fn); // 启动任务 setTimeout(function() { _this.next(); }, 0) }
我们需要一个中间件next用来触发事件
_LazyMan.prototype.next = function() { var fn = this.tasks.shift(); fn && fn(); }
完成了触发器、队列存储的位置,下一步只要实现链式调用就可以了。只需要返回this对象本身就可以了。
这里只实现一个wakeup示例
实现链式调用
_LazyMan.prototype.wakeup = function(times) { var _this = this; var fn = (function(time){ return function() { setTimeout(function(){ console.log("getup after "+time+"s !") _this.next(); }, time*1000) } })(times) // 从队列头部插入 _this.tasks.unshift(fn); return this; }
最后一步封装
function LazyMan(name) { return new _LazyMan(name) }
还有一个sleep(), eat()大家可以来试一试。如果有想法的话欢迎提出~ 大家交流一下 O(∩_∩)O
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/81312.html
摘要:首先我们来讲这个栈在中,每当有函数被执行的时候都会在当前的执行堆栈中创建一个新的堆栈帧,并放到栈顶。因为是链式调用,所以代码一直在同一个作用于中执行,也就是说当前的堆栈帧一直没有被移出栈。 前言 前几天在稀土上看到一篇面试的帖子,里面微信有一道题是lazyman的实现,具体要做的事情就是 LazyMan(Hank) //Hi! This is Hank! LazyMan(Hank)....
摘要:实现一个,可以按照以下方式调用输出输出等待秒输出输出等待秒以此类推。这是典型的流程控制,问题的关键是如何实现任务的顺序执行。 实现一个LazyMan,可以按照以下方式调用: LazyMan(Hank)输出: Hi! This is Hank! LazyMan(Hank).sleep(10).eat(dinner)输出 Hi! This is H...
摘要:实现一个,可以按照以下方式调用输出输出等待秒输出输出等待秒以此类推。这是典型的流程控制,问题的关键是如何实现任务的顺序执行。 实现一个LazyMan,可以按照以下方式调用: LazyMan(Hank)输出: Hi! This is Hank! LazyMan(Hank).sleep(10).eat(dinner)输出 Hi! This is H...
阅读 4212·2021-09-26 10:11
阅读 2633·2021-07-28 00:37
阅读 3179·2019-08-29 15:29
阅读 1146·2019-08-29 15:23
阅读 3110·2019-08-26 18:37
阅读 2446·2019-08-26 10:37
阅读 574·2019-08-23 17:04
阅读 2328·2019-08-23 13:44