您好,登錄后才能下訂單哦!
這篇“l(fā)odash內(nèi)部方法getData和setData怎么使用”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“l(fā)odash內(nèi)部方法getData和setData怎么使用”文章吧。
getData方法主要是獲取方法的元數(shù)據(jù)metadata。
getData實(shí)現(xiàn)上借助metaMap和noop兩個(gè)內(nèi)部方法。
metaMap方法獲取當(dāng)前環(huán)境下的WeakMap對(duì)象。
import WeakMap from './_WeakMap.js'; var metaMap = WeakMap && new WeakMap;
getNative方法和root變量在之前的篇章介紹過,主要是獲取環(huán)境變量和全局方法。
源碼如下:
import getNative from './_getNative.js'; import root from './_root.js'; var WeakMap = getNative(root, 'WeakMap');
noop主要是獲取undefined的返回結(jié)果。
源碼如下:
function noop() {}
import metaMap from './_metaMap.js'; import noop from './noop.js'; var getData = !metaMap ? noop : function(func) { return metaMap.get(func); };
setData方法可以設(shè)置參數(shù)func
的元數(shù)據(jù)。
參數(shù)說明:
參數(shù)1:表示要關(guān)聯(lián)元數(shù)據(jù)的函數(shù)
參數(shù)2:表示對(duì)元數(shù)據(jù)進(jìn)行數(shù)據(jù)處理。
setData實(shí)現(xiàn)上需要借助兩個(gè)內(nèi)部方法,分別是:baseSetData和shortOut。
baseSetData是setData的基本實(shí)現(xiàn),通過Map對(duì)象存儲(chǔ)函數(shù)與數(shù)據(jù)的映射關(guān)系。
實(shí)現(xiàn)上借助identity方法和metaMap方法,identity方法在之前篇章中介紹過,主要是代表函數(shù)一種調(diào)用關(guān)系,該方法返回參數(shù)。metaMap方法主要是調(diào)用Map對(duì)象,這個(gè)方法在上面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; };
shortOut方法用于按照毫秒范圍內(nèi)的調(diào)用數(shù)檢測熱函數(shù),可以創(chuàng)建一個(gè)函數(shù),該函數(shù)將縮短并調(diào)用identity方法。
實(shí)現(xiàn)上通過閉包計(jì)數(shù),只有滿足調(diào)用的時(shí)間差小于HOT_SPAN時(shí)才會(huì)進(jìn)入后續(xù)判斷,否則count初始化為0,并且直接返回原函數(shù)以及參數(shù)關(guān)系等。
在后續(xù)處理中只有count滿足大于等于HOT_COUNT時(shí)直接返回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); }; }
import baseSetData from './_baseSetData.js'; import shortOut from './_shortOut.js'; var setData = shortOut(baseSetData);
以上就是關(guān)于“l(fā)odash內(nèi)部方法getData和setData怎么使用”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。