實(shí)現(xiàn)函數(shù)LazyMan,使得:
LazyMan("Hank"); 輸出
Hi Hank!
LazyMan("Hank").eat("dinner");輸出
Hi Hank!
Eat dinner!
LazyMan("Hank").sleep(5).eat("dinner"); 輸出
Hi Hank!
//等待五秒
Eat dinner!
LazyMan("Hank").sleepFirst(5).eat("dinner");輸出
//等待五秒
Hi Hank!
Eat dinner!
實(shí)現(xiàn)代碼:
function LazyMan(name) { lp.taskList.push("Hi " + name + "!"); return lp.exe(); } var lp = LazyMan.prototype; lp.taskList = []; lp.eat = function(v) { lp.taskList.push("Eat " + v + "!"); return lp.exe(); } lp.sleep = function(t) { lp.taskList.push("sleep " + t); return lp.exe(); } lp.sleepFirst = function(t) { lp.taskList.unshift("sleep " + t); return lp.exe(); } lp.taskStart = false; lp.exe = function() { var that = this; if(!lp.taskStart) { lp.taskStart = true; setTimeout(function() { doTask(lp.taskList); that.taskList = []; }, 0); } return lp; } function doTask(taskList) { if(taskList.length) { var task = taskList.shift(); if(task.indexOf("sleep") !== -1) { var match = task.split(" "); var t = parseInt(match[1]); setTimeout(function(){ doTask(taskList); }, t * 1000); } else { console.log(task); doTask(taskList); } } } // LazyMan("Hank"); // LazyMan("Hank").eat("dinner"); // LazyMan("Hank").sleep(5).eat("dinner"); LazyMan("Hank").sleepFirst(5).eat("dinner");
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/88183.html
摘要:前言之前在掘金上到一篇文章關(guān)于微信面試的文章,其中提到了手動實(shí)現(xiàn)的問題。看起來好像挺有趣的,我們來分析以下分析首先我們看到例子有幾個特點(diǎn),一個是我們調(diào)用的時候不需要用到關(guān)鍵字,這意味著我們需要使用工廠函數(shù)另一個是要我們實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用。 前言 之前在掘金上到一篇文章關(guān)于微信面試的文章,其中提到了手動實(shí)現(xiàn)Lazyman的問題。剛開始看到Lazyman我是一臉懵逼的,這是什么鬼,后來查了查了一...
摘要:首先我們來講這個棧在中,每當(dāng)有函數(shù)被執(zhí)行的時候都會在當(dāng)前的執(zhí)行堆棧中創(chuàng)建一個新的堆棧幀,并放到棧頂。因?yàn)槭擎準(zhǔn)秸{(diào)用,所以代碼一直在同一個作用于中執(zhí)行,也就是說當(dāng)前的堆棧幀一直沒有被移出棧。 前言 前幾天在稀土上看到一篇面試的帖子,里面微信有一道題是lazyman的實(shí)現(xiàn),具體要做的事情就是 LazyMan(Hank) //Hi! This is Hank! LazyMan(Hank)....
摘要:實(shí)現(xiàn)一個,可以按照以下方式調(diào)用輸出輸出等待秒輸出輸出等待秒以此類推。這是典型的流程控制,問題的關(guān)鍵是如何實(shí)現(xiàn)任務(wù)的順序執(zhí)行。 實(shí)現(xiàn)一個LazyMan,可以按照以下方式調(diào)用: LazyMan(Hank)輸出: Hi! This is Hank! LazyMan(Hank).sleep(10).eat(dinner)輸出 Hi! This is H...
摘要:實(shí)現(xiàn)一個,可以按照以下方式調(diào)用輸出輸出等待秒輸出輸出等待秒以此類推。這是典型的流程控制,問題的關(guān)鍵是如何實(shí)現(xiàn)任務(wù)的順序執(zhí)行。 實(shí)現(xiàn)一個LazyMan,可以按照以下方式調(diào)用: LazyMan(Hank)輸出: Hi! This is Hank! LazyMan(Hank).sleep(10).eat(dinner)輸出 Hi! This is H...
摘要:只需要返回對象本身就可以了。這里只實(shí)現(xiàn)一個示例實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用從隊(duì)列頭部插入最后一步封裝還有一個大家可以來試一試。如果有想法的話歡迎提出大家交流一下 ES5實(shí)現(xiàn)LazyMan lazyman主要原理是: 需要一個隊(duì)列保存將要用到的事件 利用閉包將事件保存至隊(duì)列中 創(chuàng)建一個中間件next用來觸發(fā)事件 鏈?zhǔn)秸{(diào)用 使用lazyman需要實(shí)現(xiàn)的場景: LazyMan(Tom); // my n...
閱讀 1336·2023-04-25 23:47
閱讀 912·2021-11-23 09:51
閱讀 4432·2021-09-26 10:17
閱讀 3706·2021-09-10 11:19
閱讀 3254·2021-09-06 15:10
閱讀 3546·2019-08-30 12:49
閱讀 2421·2019-08-29 13:20
閱讀 1730·2019-08-28 18:14