摘要:所以它與其他系列的文章并不沖突,完全可以在閱讀完這個系列后,再跟著其他系列的文章接著學習。如何閱讀我在寫系列的時候,被問的最多的問題就是該怎么閱讀源碼我想簡單聊一下自己的思路。感謝大家的閱讀和支持,我是冴羽,下個系列再見啦
前言
別名:《underscore 系列 8 篇正式完結!》
介紹underscore 系列是我寫的第三個系列,前兩個系列分別是 JavaScript 深入系列、JavaScript 專題系列。
這個系列算是 JavaScript 專題系列的番外篇,總共寫了 8 篇,重點介紹了 underscore 中的代碼組織、鏈式調用、內部函數、模板引擎、工具函數等內容,旨在幫助大家閱讀源碼,以及寫出自己的 undercore。
順便宣傳一下該博客的 Github 倉庫:https://github.com/mqyqingfeng/Blog,歡迎 star,鼓勵一下作者。
起因想先聊聊為什么會寫 underscore 系列?
最一開始寫 JavaScript 專題系列的時候,因為涉及到去重、扁平等功能點的實現,所以就研究了 underscore 中的實現方式,后來寫完專題系列,有朋友就問我該如何組織這些功能函數呢?
說起來,我也有這樣的困惑,因為以前在技術平臺上也看到過一些分享自己常用功能函數的文章,每當這個時候,總會幻想如果有篇文章能講講該如何組織代碼,然后我學會后,在業務中不斷總結完善,或許我也能寫出自己的工具函數庫。
臨淵羨魚,不如退而結網,所以我想研究下 underscore 的代碼是如何組織的,后來又覺得反正都看了一遍,再進一步,講講 underscore 的源碼吧。
不過,這個系列的內容跟一般講解 underscore 源碼的系列文章還是有很大的不同,主要在于它講的算是很"邊緣"的內容,從文章的標題中也可以看出,講完代碼結構后,講了內部函數、模板引擎,工具函數等這些并不是在實際開發中常用到的 API,即便是在其他的系列文章中,這些也算是很冷門的內容,不過這也正好印證了我寫 underscore 系列的目的,就是幫助大家更好的閱讀源碼。
所以它與其他 underscore 系列的文章并不沖突,完全可以在閱讀完這個系列后,再跟著其他系列的文章接著學習。
如何閱讀我在寫 underscore 系列的時候,被問的最多的問題就是該怎么閱讀 underscore 源碼?我想簡單聊一下自己的思路。
首先,underscore 的定位是一個功能函數庫,提供了 110 多個 API 幫助開發,所以首先要搞明白的就是那么多的函數,是如何組織的?是如何做到既可以直接使用,又能以面向對象的方式使用的?又是如何實現鏈式調用的?了解了如何組織代碼,甚至從中抽離得到一個模板,我們再從業務中慢慢總結,最終也能寫出自己的 underscore。
接下來是閱讀內部函數,其實不多,只有 cb、optimizeCb、restArgs、shallowProperty、deepGet 而已,之所以閱讀這些函數的實現,是因為在讀其他 API 時很可能會接觸到這些函數,我第一次在其他 API 中看到 cb、optimizeCb、restArgs 函數時都是一臉懵逼,接著看 API 吧,總覺得這點沒看懂,心里一直很不爽,轉而去看這些函數的實現,又因為只讀了一點源碼,想不明白為什么要這樣抽象,進退兩難,慢慢的就產生了挫敗感,這也就是我為什么會專門寫了兩篇介紹內部函數,不僅僅是講解源碼,更重要的是希望大家明白為什么要這么抽象。
最后就是跟著興趣學習,underscore API 眾多,一個一個看實在是消磨熱情,倒不如你想了解哪個功能就去研究哪個功能的實現,如果說在這部分有什么建議的話,那就是在研究一些函數具體的實現方式時,可以參考一些已經寫過的源碼分析的文章,也許事半功倍:
吳曉軍源碼分析系列
韓子遲源碼分析系列
當然啦,即便如此,閱讀源碼的過程也并不是一帆風順,總會因為各種原因,放棄又重新拾起,又放棄又重新拾起,很正常,我也沒有什么好的方法,只能說保持一個平和的心態就是一種進步。
全目錄underscore 系列之如何寫自己的 underscore
underscore 系列之鏈式調用
underscore 系列之內部函數 cb 和 optimizeCb
underscore 系列之內部函數 restArgs
underscore 系列之防沖突與 Utility Functions
underscore 系列之實現一個模板引擎(上)
underscore 系列之實現一個模板引擎(下)
underscore 系列之字符實體與 _.escape
下期預告按照原定的計劃,是準備寫 ES6 系列的,不過,因為工作的原因,很可能會先寫 React 系列,暫時還不能確定,今年只希望能寫完最后兩個系列。
感謝大家的閱讀和支持,我是冴羽,下個系列再見啦![]~( ̄▽ ̄)~**
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/93946.html
摘要:最近開始看源碼,并將源碼解讀放在了我的計劃中。今天就跟大家聊一聊中一些常用類型檢查方法,以及一些工具類的判斷方法。用是否含有屬性來判斷工具類判斷方法接下來看下一些常用的工具類判斷方法。 Why underscore 最近開始看 underscore.js 源碼,并將 underscore.js 源碼解讀 放在了我的 2016 計劃中。 閱讀一些著名框架類庫的源碼,就好像和一個個大師對話...
摘要:最近開始看源碼,并將源碼解讀放在了我的計劃中。將轉為數組同時去掉第一個元素之后便可以調用方法總結數組的擴展方法就解讀到這里了,相關源碼可以參考這部分。放個預告,下一篇會暫緩下,講下相關的東西,敬請期待。 Why underscore 最近開始看 underscore.js 源碼,并將 underscore.js 源碼解讀 放在了我的 2016 計劃中。 閱讀一些著名框架類庫的源碼,就好...
摘要:今天要講的是,如何在數組中尋找元素,對應中的,,,以及方法。如果往一個有序數組中插入元素,使得數組繼續保持有序,那么這個插入位置是這就是這個方法的作用,有序,很顯然用二分查找即可。 Why underscore (覺得這部分眼熟的可以直接跳到下一段了...) 最近開始看 underscore.js 源碼,并將 underscore.js 源碼解讀 放在了我的 2016 計劃中。 閱讀一...
摘要:最近開始看源碼,并將源碼解讀放在了我的計劃中。像和使用內置構造函數所創建的對象都會繼承自和的不可枚舉屬性,例如的方法或者的方法。循環將迭代對象的所有可枚舉屬性和從它的構造函數的繼承而來的包括被覆蓋的內建屬性。 Why underscore 最近開始看 underscore.js 源碼,并將 underscore.js 源碼解讀 放在了我的 2016 計劃中。 閱讀一些著名框架類庫的源碼...
摘要:今天要講的是數組展開以及和數組展開息息相關的一個重要的內部方法。也是個布爾值,當為并且也為時,能過濾參數元素中的非數組元素。首先并不需要對數組深度展開,其次傳入的是數組,對于非數組元素可以直接忽略。 Why underscore (覺得這一段眼熟的童鞋可以直接跳到正文了...) 最近開始看 underscore.js 源碼,并將 underscore.js 源碼解讀 放在了我的 201...
閱讀 1669·2021-11-19 09:40
閱讀 2924·2021-09-24 10:27
閱讀 3215·2021-09-02 15:15
閱讀 1876·2019-08-30 15:54
閱讀 1202·2019-08-30 15:54
閱讀 1369·2019-08-30 13:12
閱讀 626·2019-08-28 18:05
閱讀 2794·2019-08-27 10:53