lodash內(nèi)部方法getData和setData實(shí)例解析
getData
getData方法主要是獲取方法的元數(shù)據(jù)metadata。
getData實(shí)現(xiàn)上借助metaMap和noop兩個內(nèi)部方法。
metaMap
metaMap方法獲取當(dāng)前環(huán)境下的WeakMap對象。
import WeakMap from './_WeakMap.js'; var metaMap = WeakMap && new WeakMap;
WeakMap
getNative方法和root變量在之前的篇章介紹過,主要是獲取環(huán)境變量和全局方法。
源碼如下:
import getNative from './_getNative.js'; import root from './_root.js'; var WeakMap = getNative(root, 'WeakMap');
noop
noop主要是獲取undefined的返回結(jié)果。
源碼如下:
function noop() {}
getData源碼實(shí)現(xiàn)
import metaMap from './_metaMap.js'; import noop from './noop.js'; var getData = !metaMap ? noop : function(func) { return metaMap.get(func); };
setData
setData方法可以設(shè)置參數(shù)func
的元數(shù)據(jù)。
參數(shù)說明:
- 參數(shù)1:表示要關(guān)聯(lián)元數(shù)據(jù)的函數(shù)
- 參數(shù)2:表示對元數(shù)據(jù)進(jìn)行數(shù)據(jù)處理。
setData實(shí)現(xiàn)上需要借助兩個內(nèi)部方法,分別是:baseSetData和shortOut。
baseSetData
baseSetData是setData的基本實(shí)現(xiàn),通過Map對象存儲函數(shù)與數(shù)據(jù)的映射關(guān)系。
實(shí)現(xiàn)上借助identity方法和metaMap方法,identity方法在之前篇章中介紹過,主要是代表函數(shù)一種調(diào)用關(guān)系,該方法返回參數(shù)。metaMap方法主要是調(diào)用Map對象,這個方法在上面getData里已經(jīng)介紹過了。
import identity from './identity.js'; import metaMap from './_metaMap.js'; var baseSetData = !metaMap ? identity : function(func, data) { metaMap.set(func, data); return func; };
metaMap
shortOut
shortOut方法用于按照毫秒范圍內(nèi)的調(diào)用數(shù)檢測熱函數(shù),可以創(chuàng)建一個函數(shù),該函數(shù)將縮短并調(diào)用identity方法。
實(shí)現(xiàn)上通過閉包計(jì)數(shù),只有滿足調(diào)用的時間差小于HOT_SPAN時才會進(jìn)入后續(xù)判斷,否則count初始化為0,并且直接返回原函數(shù)以及參數(shù)關(guān)系等。
在后續(xù)處理中只有count滿足大于等于HOT_COUNT時直接返回arguments[0]。
源碼如下:
var HOT_COUNT = 800, HOT_SPAN = 16; function shortOut(func) { var count = 0, lastCalled = 0; return function() { var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); lastCalled = stamp; if (remaining > 0) { if (++count >= HOT_COUNT) { return arguments[0]; } } else { count = 0; } return func.apply(undefined, arguments); }; }
setData源碼實(shí)現(xiàn)
import baseSetData from './_baseSetData.js'; import shortOut from './_shortOut.js'; var setData = shortOut(baseSetData);
小結(jié)
本篇章我們了解到getData和setData方法實(shí)現(xiàn),主要是通過Map對象對參數(shù)設(shè)置元數(shù)據(jù),同時我們也了解到內(nèi)部其他方法metaMap、noop、shortOut等方法的實(shí)現(xiàn),更多關(guān)于lodash方法getData setData的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
js二進(jìn)制數(shù)據(jù)及其互相轉(zhuǎn)化實(shí)現(xiàn)詳解
這篇文章主要為大家介紹了js二進(jìn)制數(shù)據(jù)及其互相轉(zhuǎn)化實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02業(yè)務(wù)層hooks封裝useSessionStorage實(shí)例詳解
這篇文章主要為大家介紹了業(yè)務(wù)層hooks封裝useSessionStorage實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08JavaScript的模塊化開發(fā)框架Sea.js上手指南
Sea.js的目的是追求簡單的代碼書寫和組織方式,Sea.js并沒有過多功能而是主要對前端程序的部署結(jié)構(gòu)作出約束,下面我們就來看一下JavaScript的模塊化開發(fā)框架Sea.js上手指南:2016-05-05微信小程序 (三)tabBar底部導(dǎo)航詳細(xì)介紹
這篇文章主要介紹了微信小程序 (三)tabBar底部導(dǎo)航詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-09-09