溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

lodash內(nèi)部方法getData和setData怎么使用

發(fā)布時(shí)間:2022-08-31 10:06:15 來源:億速云 閱讀:134 作者:iii 欄目:開發(fā)技術(shù)

這篇“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

    getData方法主要是獲取方法的元數(shù)據(jù)metadata。

    getData實(shí)現(xiàn)上借助metaMap和noop兩個(gè)內(nèi)部方法。

    metaMap

    metaMap方法獲取當(dāng)前環(huán)境下的WeakMap對(duì)象。

    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:表示對(duì)元數(shù)據(jù)進(jìn)行數(shù)據(jù)處理。

    setData實(shí)現(xiàn)上需要借助兩個(gè)內(nèi)部方法,分別是:baseSetData和shortOut。

    baseSetData

    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;
    };
    metaMap

    shortOut

    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);
      };
    }

    setData源碼實(shí)現(xiàn)

    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è)資訊頻道。

    向AI問一下細(xì)節(jié)

    免責(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)容。

    AI