世界今日报丨lodash内部方法getData和setData实例解析
目录
getDatametaMapWeakMapnoopgetData源码实现setDatabaseSetDatametaMapshortOutsetData源码实现小结getData
getData方法主要是获取方法的元数据metadata。
getData实现上借助metaMap和noop两个内部方法。
metaMap
metaMap方法获取当前环境下的WeakMap对象。
(相关资料图)
import WeakMap from "./_WeakMap.js"; var metaMap = WeakMap && new WeakMap;
WeakMap
getNative方法和root变量在之前的篇章介绍过,主要是获取环境变量和全局方法。
源码如下:
import getNative from "./_getNative.js"; import root from "./_root.js"; var WeakMap = getNative(root, "WeakMap");
noop
noop主要是获取undefined的返回结果。
源码如下:
function noop() {}
getData源码实现
import metaMap from "./_metaMap.js"; import noop from "./noop.js"; var getData = !metaMap ? noop : function(func) { return metaMap.get(func); };
setData
setData方法可以设置参数func
的元数据。
参数说明:
参数1:表示要关联元数据的函数参数2:表示对元数据进行数据处理。setData实现上需要借助两个内部方法,分别是:baseSetData和shortOut。
baseSetData
baseSetData是setData的基本实现,通过Map对象存储函数与数据的映射关系。
实现上借助identity方法和metaMap方法,identity方法在之前篇章中介绍过,主要是代表函数一种调用关系,该方法返回参数。metaMap方法主要是调用Map对象,这个方法在上面getData里已经介绍过了。
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方法用于按照毫秒范围内的调用数检测热函数,可以创建一个函数,该函数将缩短并调用identity方法。
实现上通过闭包计数,只有满足调用的时间差小于HOT_SPAN时才会进入后续判断,否则count初始化为0,并且直接返回原函数以及参数关系等。
在后续处理中只有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源码实现
import baseSetData from "./_baseSetData.js"; import shortOut from "./_shortOut.js"; var setData = shortOut(baseSetData);
小结
本篇章我们了解到getData和setData方法实现,主要是通过Map对象对参数设置元数据,同时我们也了解到内部其他方法metaMap、noop、shortOut等方法的实现,更多关于lodash方法getData setData的资料请关注脚本之家其它相关文章!
X 关闭
X 关闭
- 1联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 2亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 3现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 4如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 5AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 6转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 7充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 8好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 9名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?
- 10亚马逊云科技成立量子网络中心致力解决量子计算领域的挑战