摘要:只需要返回對(duì)象本身就可以了。這里只實(shí)現(xiàn)一個(gè)示例實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用從隊(duì)列頭部插入最后一步封裝還有一個(gè)大家可以來試一試。如果有想法的話歡迎提出大家交流一下
ES5實(shí)現(xiàn)LazyMan
lazyman主要原理是:
需要一個(gè)隊(duì)列保存將要用到的事件
利用閉包將事件保存至隊(duì)列中
創(chuàng)建一個(gè)中間件next用來觸發(fā)事件
鏈?zhǔn)秸{(diào)用
使用lazyman需要實(shí)現(xiàn)的場(chǎng)景:
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
核心代碼實(shí)現(xiàn):
需要?jiǎng)?chuàng)建一個(gè)數(shù)組當(dāng)做隊(duì)列使用
function _LazyMan(name) { // 事件存儲(chǔ)隊(duì)列 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); // 啟動(dòng)任務(wù) setTimeout(function() { _this.next(); }, 0) }
我們需要一個(gè)中間件next用來觸發(fā)事件
_LazyMan.prototype.next = function() { var fn = this.tasks.shift(); fn && fn(); }
完成了觸發(fā)器、隊(duì)列存儲(chǔ)的位置,下一步只要實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用就可以了。只需要返回this對(duì)象本身就可以了。
這里只實(shí)現(xiàn)一個(gè)wakeup示例
實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用
_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) // 從隊(duì)列頭部插入 _this.tasks.unshift(fn); return this; }
最后一步封裝
function LazyMan(name) { return new _LazyMan(name) }
還有一個(gè)sleep(), eat()大家可以來試一試。如果有想法的話歡迎提出~ 大家交流一下 O(∩_∩)O
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/81312.html
摘要:首先我們來講這個(gè)棧在中,每當(dāng)有函數(shù)被執(zhí)行的時(shí)候都會(huì)在當(dāng)前的執(zhí)行堆棧中創(chuàng)建一個(gè)新的堆棧幀,并放到棧頂。因?yàn)槭擎準(zhǔn)秸{(diào)用,所以代碼一直在同一個(gè)作用于中執(zhí)行,也就是說當(dāng)前的堆棧幀一直沒有被移出棧。 前言 前幾天在稀土上看到一篇面試的帖子,里面微信有一道題是lazyman的實(shí)現(xiàn),具體要做的事情就是 LazyMan(Hank) //Hi! This is Hank! LazyMan(Hank)....
摘要:前言之前在掘金上到一篇文章關(guān)于微信面試的文章,其中提到了手動(dòng)實(shí)現(xiàn)的問題。看起來好像挺有趣的,我們來分析以下分析首先我們看到例子有幾個(gè)特點(diǎn),一個(gè)是我們調(diào)用的時(shí)候不需要用到關(guān)鍵字,這意味著我們需要使用工廠函數(shù)另一個(gè)是要我們實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用。 前言 之前在掘金上到一篇文章關(guān)于微信面試的文章,其中提到了手動(dòng)實(shí)現(xiàn)Lazyman的問題。剛開始看到Lazyman我是一臉懵逼的,這是什么鬼,后來查了查了一...
摘要:實(shí)現(xiàn)一個(gè),可以按照以下方式調(diào)用輸出輸出等待秒輸出輸出等待秒以此類推。這是典型的流程控制,問題的關(guān)鍵是如何實(shí)現(xiàn)任務(wù)的順序執(zhí)行。 實(shí)現(xiàn)一個(gè)LazyMan,可以按照以下方式調(diào)用: LazyMan(Hank)輸出: Hi! This is Hank! LazyMan(Hank).sleep(10).eat(dinner)輸出 Hi! This is H...
摘要:實(shí)現(xiàn)一個(gè),可以按照以下方式調(diào)用輸出輸出等待秒輸出輸出等待秒以此類推。這是典型的流程控制,問題的關(guān)鍵是如何實(shí)現(xiàn)任務(wù)的順序執(zhí)行。 實(shí)現(xiàn)一個(gè)LazyMan,可以按照以下方式調(diào)用: LazyMan(Hank)輸出: Hi! This is Hank! LazyMan(Hank).sleep(10).eat(dinner)輸出 Hi! This is H...
閱讀 4270·2021-09-26 10:11
閱讀 2666·2021-07-28 00:37
閱讀 3223·2019-08-29 15:29
閱讀 1178·2019-08-29 15:23
閱讀 3124·2019-08-26 18:37
閱讀 2468·2019-08-26 10:37
閱讀 597·2019-08-23 17:04
閱讀 2347·2019-08-23 13:44