欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

lodash內(nèi)部方法getData和setData實(shí)例解析

 更新時間:2022年08月30日 17:12:30   作者:EricHong  
本篇章我們將了解lodash里內(nèi)部關(guān)于Data的操作方法,重點(diǎn)關(guān)注getData、setData兩個內(nèi)部方法,同時由實(shí)現(xiàn)上引申其他內(nèi)部封裝的方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

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)文章

最新評論