別名:《underscore 系列 8 篇正式完結!》git
underscore 系列是我寫的第三個系列,前兩個系列分別是 JavaScript 深刻系列、JavaScript 專題系列。github
這個系列算是 JavaScript 專題系列的番外篇,總共寫了 8 篇,重點介紹了 underscore 中的代碼組織、鏈式調用、內部函數、模板引擎、工具函數等內容,旨在幫助你們閱讀源碼,以及寫出本身的 undercore。api
順便宣傳一下該博客的 Github 倉庫:github.com/mqyqingfeng…,歡迎 star,鼓勵一下做者。函數
想先聊聊爲何會寫 underscore 系列?工具
最一開始寫 JavaScript 專題系列的時候,由於涉及到去重、扁平等功能點的實現,因此就研究了 underscore 中的實現方式,後來寫完專題系列,有朋友就問我該如何組織這些功能函數呢?源碼分析
提及來,我也有這樣的困惑,由於之前在技術平臺上也看到過一些分享本身經常使用功能函數的文章,每當這個時候,總會幻想若是有篇文章能講講該如何組織代碼,而後我學會後,在業務中不斷總結完善,或許我也能寫出本身的工具函數庫。學習
臨淵羨魚,不如退而結網,因此我想研究下 underscore 的代碼是如何組織的,後來又以爲反正都看了一遍,再進一步,講講 underscore 的源碼吧。rest
不過,這個系列的內容跟通常講解 underscore 源碼的系列文章仍是有很大的不一樣,主要在於它講的算是很"邊緣"的內容,從文章的標題中也能夠看出,講完代碼結構後,講了內部函數、模板引擎,工具函數等這些並非在實際開發中經常使用到的 API,即使是在其餘的系列文章中,這些也算是很冷門的內容,不過這也正好印證了我寫 underscore 系列的目的,就是幫助你們更好的閱讀源碼。對象
因此它與其餘 underscore 系列的文章並不衝突,徹底能夠在閱讀完這個系列後,再跟着其餘系列的文章接着學習。模板引擎
我在寫 underscore 系列的時候,被問的最多的問題就是該怎麼閱讀 underscore 源碼?我想簡單聊一下本身的思路。
首先,underscore 的定位是一個功能函數庫,提供了 110 多個 API 幫助開發,因此首先要搞明白的就是那麼多的函數,是如何組織的?是如何作到既能夠直接使用,又能以面向對象的方式使用的?又是如何實現鏈式調用的?瞭解瞭如何組織代碼,甚至從中抽離獲得一個模板,咱們再從業務中慢慢總結,最終也能寫出本身的 underscore。
接下來是閱讀內部函數,其實很少,只有 cb、optimizeCb、restArgs、shallowProperty、deepGet 而已,之因此閱讀這些函數的實現,是由於在讀其餘 API 時極可能會接觸到這些函數,我第一次在其餘 API 中看到 cb、optimizeCb、restArgs 函數時都是一臉懵逼,接着看 API 吧,總以爲這點沒看懂,內心一直很不爽,轉而去看這些函數的實現,又由於只讀了一點源碼,想不明白爲何要這樣抽象,進退兩難,慢慢的就產生了挫敗感,這也就是我爲何會專門寫了兩篇介紹內部函數,不只僅是講解源碼,更重要的是但願你們明白爲何要這麼抽象。
最後就是跟着興趣學習,underscore API 衆多,一個一個看實在是消磨熱情,倒不如你想了解哪一個功能就去研究哪一個功能的實現,若是說在這部分有什麼建議的話,那就是在研究一些函數具體的實現方式時,能夠參考一些已經寫過的源碼分析的文章,也許事半功倍:
固然啦,即使如此,閱讀源碼的過程也並非一路順風,總會由於各類緣由,放棄又從新拾起,又放棄又從新拾起,很正常,我也沒有什麼好的方法,只能說保持一個平和的心態就是一種進步。
按照原定的計劃,是準備寫 ES6 系列的,不過,由於工做的緣由,極可能會先寫 React 系列,暫時還不能肯定,今年只但願能寫完最後兩個系列。
感謝你們的閱讀和支持,我是冴羽,下個系列再見啦![]~( ̄▽ ̄)~**