javascript - 一道面試題,大家看過來
PHPz
PHPz 2017-05-16 13:30:09
0
4
545

實作這樣子的函數

person('tom')
// 输出 hi tom

person('tom').getup('洗刷刷')
// 输出 hi tom
// 输出 tom getup and 洗刷刷

person('tom').before('嘘嘘').getup('洗刷刷')
// 输出 tom 嘘嘘
// 输出 hi tom 
// 输出 tom 嘘嘘 getup and 洗刷刷


問 用什麼來實現? ?
面試官說,涉及到異步,隊列什麼的~~~

PHPz
PHPz

学习是最好的投资!

全部回覆(4)
黄舟

就是一個流程控制啊,就像lazyMan,可以看這篇http://www.cnblogs.com/Upton/...

仅有的幸福

我猜你要的是這個 下面展示一個原理 程式碼結構很簡單

有一個執行佇列jobs 调用before的时候把内容加到队列头部 调用getup的時候把內容加到尾部

基本原理就是利用setTimeout 时间设置为0 setTimeout裡面的函數 要在當前運行環境所有東西運行完之後才會執行

所以我在懷疑題主的第三個例子裡 第三行又輸出一次嘘嘘 是不是筆誤

不過就算不是筆誤 也沒事 按照這個原理想怎麼改就怎麼改 多次調用也不是問題

function person(name){
    var self = {};
    self.jobs = ["hi " + name];
    self.before = function(s){
        self.jobs.unshift(name + " " + s);
        return this;
    }
    self.getup = function (s){
        self.jobs.push("getup and " + s);
        return this;
    }
    setTimeout(function(){console.log(self.jobs)}, 0)
    return self;
}

大家讲道理

參考 promise 實作過程

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板