lodash內(nèi)部方法getData和setData實例解析
getData
getData方法主要是獲取方法的元數(shù)據(jù)metadata。
getData實現(xiàn)上借助metaMap和noop兩個內(nèi)部方法。
metaMap
metaMap方法獲取當前環(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源碼實現(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ù)進行數(shù)據(jù)處理。
setData實現(xiàn)上需要借助兩個內(nèi)部方法,分別是:baseSetData和shortOut。
baseSetData
baseSetData是setData的基本實現(xiàn),通過Map對象存儲函數(shù)與數(shù)據(jù)的映射關(guān)系。
實現(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方法。
實現(xiàn)上通過閉包計數(shù),只有滿足調(diào)用的時間差小于HOT_SPAN時才會進入后續(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源碼實現(xiàn)
import baseSetData from './_baseSetData.js'; import shortOut from './_shortOut.js'; var setData = shortOut(baseSetData);
小結(jié)
本篇章我們了解到getData和setData方法實現(xiàn),主要是通過Map對象對參數(shù)設(shè)置元數(shù)據(jù),同時我們也了解到內(nèi)部其他方法metaMap、noop、shortOut等方法的實現(xiàn),更多關(guān)于lodash方法getData setData的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript架構(gòu)localStorage特殊場景下二次封裝操作
這篇文章主要為大家介紹了JavaScript架構(gòu)localStorage在特殊場景下的二次封裝操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06
微信小程序遇到修改數(shù)據(jù)后頁面不渲染的問題解決
這篇文章主要介紹了微信小程序遇到修改數(shù)據(jù)后頁面不渲染的問題解決的相關(guān)資料,需要的朋友可以參考下2017-03-03
JavaScript數(shù)據(jù)類型對函數(shù)式編程的影響示例解析
這篇文章主要為大家介紹了JavaScript數(shù)據(jù)類型對函數(shù)式編程的影響示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02

