underscore.js 源码分析(十四)
extend
extendOwn
pick
omit
default
extend
_.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) { |
pick
1 | 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 |