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