国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

LazyMan代碼實(shí)現(xiàn)

yhaolpz / 1506人閱讀

摘要:只需要返回對(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

相關(guān)文章

  • 關(guān)于lazyman你還應(yīng)該知道這幾件事

    摘要:首先我們來講這個(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)....

    未東興 評(píng)論0 收藏0
  • LazyMan

    實(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);輸出//等待...

    Winer 評(píng)論0 收藏0
  • 實(shí)現(xiàn)Lazyman

    摘要:前言之前在掘金上到一篇文章關(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我是一臉懵逼的,這是什么鬼,后來查了查了一...

    Tonny 評(píng)論0 收藏0
  • 如何實(shí)現(xiàn)一個(gè) 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...

    diabloneo 評(píng)論0 收藏0
  • 如何實(shí)現(xiàn)一個(gè) 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...

    frank_fun 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<