underscore.js 源码分析(十四)
extend extendOwn pick omit defaultextend
_.extend(destination, *sources)将多个对象 souces 覆盖到 destination 上面,返回被覆盖掉的 destination 上面。使用 extend 类似于使用 Object.assign 用来将多个对象进行合并。自己写的代码如下:1 | function extend(destination) { |
1 | let createAssigner = function (keysFunc, undefinedOnly) { |
extendOwn
使用 extendOwn 实现的效果类似于使用 extends, 实现的效果是只是复制自己的属性到目标对象。_.extendOwn(destination, *source)复制 source 属性的值到 destination 只是复制自身的属性。(不包括继承的属性)这个函数与 _.extend 的不同之处在于不会将 source 对象中继承到的属性复制到 destination 之中。使用 extendOwn 与 extend 的不同在于: 源码不同1 | // 使用 _.allKeys 获得到包括自身和继承得到的属性 |
pick
_.pick(object, *keys) 使用这个属性用于返回 object 副本, 过滤出 keys(有效的键组成的数组) 参数指定的属性值,或者接受一个判断函数,指定挑选哪一个 key使用 pick 的源码如下。1 | _.pick = function(object, oiteratee, context) { |
flatten 函数, 使用 flatten 函数的目的是将多层嵌套的数组转化为一维数组。flatten源码:1 | let flatten = function(input, shallow, strict, startIndex) { |
pick1 | function pick(obj, oiteratee) { |
omit
omit(object, *keys)使用 omit 函数的目的是与使用 pick 函数相反,返回一个 object 副本,过滤出除去 keys 中的属性值,或者接收一个判断函数,指定忽略哪一个 key 值。omit 源码如下:1 | _.omit = function (obj, iteratee, context) { |
default
_.defaults(object, *defaults)使用 default 的目的是使用 default 对象填充 object 中的 undefined 属性,并且返回这个 object。当 object 中存在 default 中的属性被填充的时候,使用 defaults 方法不会起作用。使用 _.defaults 方法的时候源码如下:1 | // 使用 createAssigner(keysFunc, undefinedOnly); |
createAssigner 的函数中使用 _.default 方法主要是使用下面的这句函数:1 | // 当 undefinedOnly 为 true 的时候, 接下来进行判断 obj[key] === void 0 对象的属性是否为 undefined |