關(guān)于JS中一些重要的api實現(xiàn), 鞏固你的原生JS功底

點擊上方 "程序員小樂"關(guān)注公眾號, 星標或置頂一起成長

每天凌晨00點00分, 第一時間與你相約

每日英文

As we grow up, we don't lose friends. We just learn who the real ones are.

隨著年齡的增長周蹭,我們并不是失去了一些朋友擦酌,而是我們懂得了誰才是真正的朋友惰瓜。

每日掏心話

一直以為玲躯,有些東西是永遠無法從生命中剝離的沟饥。仿佛一個厚厚的繭秒裕,當我們試著撕開那層膠著的束縛時瞒渠,總是不斷退卻技潘。

來自:神三元 | 責(zé)編:樂樂

程序員小樂(ID:study_tech)第 685 次推文 圖片來自網(wǎng)絡(luò)

正文

在面試中,常常會遇到一些手寫XXX之類的面試題分飞,因此好好總結(jié)一下悴务,對于鞏固我們的原生js的基礎(chǔ)是非常必要的。

盡管在網(wǎng)上已經(jīng)有了非常多的總結(jié)文章譬猫,但在我看來有一個普遍的問題讯檐,那就是把原理性的東西過于復(fù)雜化了。如果站在面試官的角度染服,他的目的是在最短的時間內(nèi)考察出面試者對于JS語言的理解程度别洪,但是在看了網(wǎng)站的諸多總結(jié)文章后我發(fā)現(xiàn)其中的代碼有很大一部分是做意義不大的操作,比如實現(xiàn)一個簡單的防抖柳刮,只要是核心的流程展示即可挖垛,至于其他的一些等模式則沒有必要再去深挖,一大堆的if-else讓人看上去也眼花繚亂秉颗,甚至誤導(dǎo)別人直接去背代碼痢毒,另外,核心的邏輯都能展示出來站宗,再去橫向的實現(xiàn)其他的類似情況恐怕也不是什么問題了闸准。

在以下的整理中,建議大家先照的核心要點自己寫一遍梢灭,然后對照下面的代碼夷家,復(fù)習(xí)效果更好。本文的目的就在于以最簡潔的代碼幫你從第一性原理的角度理解api的內(nèi)部運作流程敏释,凡是對于我們理解api沒有幫助的的邊界情況都不做處理库快。

一、用ES5實現(xiàn)數(shù)組的map方法

核心要點:

1.回調(diào)函數(shù)的參數(shù)有哪些钥顽,返回值如何處理义屏。

2.不修改原來的數(shù)組。

二、用ES5實現(xiàn)數(shù)組的reduce方法

核心要點:

1闽铐、初始值不傳怎么處理

2蝶怔、回調(diào)函數(shù)的參數(shù)有哪些,返回值如何處理兄墅。

三踢星、實現(xiàn)call/apply

思路: 利用this的上下文特性。

四隙咸、實現(xiàn)Object.create方法(常用)

function create(proto) {        function F() {};        F.prototype = proto;                return new F(); }

五沐悦、實現(xiàn)bind方法

核心要點:

1.對于普通函數(shù),綁定this指向

2.對于構(gòu)造函數(shù)五督,要保證原函數(shù)的原型對象上的屬性不能丟失

大家平時說的手寫bind藏否,其實就這么簡單:)

六、實現(xiàn)new關(guān)鍵字

核心要點:

  1. 創(chuàng)建一個全新的對象充包,這個對象的proto要指向構(gòu)造函數(shù)的原型對象

  2. 執(zhí)行構(gòu)造函數(shù)

  3. 返回值為object類型則作為new方法的返回值返回副签,否則返回上述全新對象

七、實現(xiàn)instanceof的作用

核心要點:原型鏈的向上查找误证。

八继薛、實現(xiàn)單例模式

核心要點: 用閉包和Proxy屬性攔截

九、實現(xiàn)數(shù)組的flat

方式其實很多愈捅,之前我做過系統(tǒng)整理,有六種方法慈鸠,請參考:

JS數(shù)組扁平化(flat)方法總結(jié)

十蓝谨、實現(xiàn)防抖功能

核心要點:

如果在定時器的時間范圍內(nèi)再次觸發(fā),則重新計時青团。

十一譬巫、實現(xiàn)節(jié)流功能

核心要點:

如果在定時器的時間范圍內(nèi)再次觸發(fā),則不予理睬督笆,等當前定時器完成芦昔,才能啟動下一個定時器。

十二娃肿、用發(fā)布訂閱模式實現(xiàn)EventEmit

參考我的另一篇文章:

基于"發(fā)布-訂閱"的原生JS插件封裝中的手寫發(fā)布訂閱部分咕缎。

十三、實現(xiàn)深拷貝

以下為簡易版深拷貝料扰,沒有考慮循環(huán)引用的情況和Buffer凭豪、Promise、Set晒杈、Map的處理嫂伞,如果一一實現(xiàn),過于復(fù)雜,面試短時間寫出來不太現(xiàn)實帖努,如果有興趣可以去這里深入實現(xiàn):

深拷貝終極探索撰豺。

十四、實現(xiàn)Promise

重點難點拼余,比較復(fù)雜污桦,請參考我的另一篇步步拆解文章:

我如何實現(xiàn)Promise

十五、使用ES5實現(xiàn)類的繼承效果

也是重點知識姿搜,我之前做過詳細拆解寡润,有五個版本,如果每一版本都能說清楚舅柜,能夠很好的體現(xiàn)自己對于原型鏈的理解梭纹,文章地址:

ES5實現(xiàn)繼承的那些事。

歡迎在留言區(qū)留下你的觀點致份,一起討論提高变抽。如果今天的文章讓你有新的啟發(fā),學(xué)習(xí)能力的提升上有新的認識氮块,歡迎轉(zhuǎn)發(fā)分享給更多人绍载。

猜你還想看

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市滔蝉,隨后出現(xiàn)的幾起案子击儡,更是在濱河造成了極大的恐慌,老刑警劉巖蝠引,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阳谍,死亡現(xiàn)場離奇詭異,居然都是意外死亡螃概,警方通過查閱死者的電腦和手機矫夯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吊洼,“玉大人训貌,你說我怎么就攤上這事∶扒希” “怎么了递沪?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長超燃。 經(jīng)常有香客問我区拳,道長,這世上最難降的妖魔是什么意乓? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任樱调,我火速辦了婚禮约素,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘笆凌。我一直安慰自己圣猎,他們只是感情好,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布乞而。 她就那樣靜靜地躺著送悔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪爪模。 梳的紋絲不亂的頭發(fā)上欠啤,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音屋灌,去河邊找鬼洁段。 笑死,一個胖子當著我的面吹牛共郭,可吹牛的內(nèi)容都是我干的祠丝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼除嘹,長吁一口氣:“原來是場噩夢啊……” “哼写半!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起尉咕,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤叠蝇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后年缎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蟆肆,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年晦款,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片枚冗。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡缓溅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出赁温,到底是詐尸還是另有隱情坛怪,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布股囊,位于F島的核電站袜匿,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏稚疹。R本人自食惡果不足惜居灯,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧怪嫌,春花似錦义锥、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至噪径,卻和暖如春柱恤,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背找爱。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工梗顺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人缴允。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓荚守,卻偏偏與公主長得像,于是被迫代替她去往敵國和親练般。 傳聞我的和親對象是個殘疾皇子矗漾,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 15、正則 正則就是一個規(guī)則薄料,用來處理字符串的規(guī)則1敞贡、正則匹配編寫一個規(guī)則,驗證某個字符串是否符合這個規(guī)則摄职,正則匹...
    萌妹撒閱讀 1,439評論 0 1
  • 本文為阮一峰大神的《ECMAScript 6 入門》的個人版提純誊役! babel babel負責(zé)將JS高級語法轉(zhuǎn)義,...
    Devildi已被占用閱讀 1,983評論 0 4
  • 弄懂js異步 講異步之前谷市,我們必須掌握一個基礎(chǔ)知識-event-loop蛔垢。 我們知道JavaScript的一大特點...
    DCbryant閱讀 2,710評論 0 5
  • 你不知道JS:異步 第三章:Promises 接上篇3-1 錯誤處理(Error Handling) 在異步編程中...
    purple_force閱讀 1,394評論 0 2
  • 第3章 基本概念 3.1 語法 3.2 關(guān)鍵字和保留字 3.3 變量 3.4 數(shù)據(jù)類型 5種簡單數(shù)據(jù)類型:Unde...
    RickCole閱讀 5,124評論 0 21