mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-03 16:47:49 +00:00
58 lines
1.7 KiB
JavaScript
58 lines
1.7 KiB
JavaScript
/**
|
|
* lodash 3.0.1 (Custom Build) <https://lodash.com/>
|
|
* Build: `lodash modern modularize exports="npm" -o ./`
|
|
* Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
|
|
* Based on Underscore.js 1.8.2 <http://underscorejs.org/LICENSE>
|
|
* Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
|
* Available under MIT license <https://lodash.com/license>
|
|
*/
|
|
var bindCallback = require('lodash._bindcallback'),
|
|
isIterateeCall = require('lodash._isiterateecall');
|
|
|
|
/**
|
|
* Creates a function that assigns properties of source object(s) to a given
|
|
* destination object.
|
|
*
|
|
* **Note:** This function is used to create `_.assign`, `_.defaults`, and `_.merge`.
|
|
*
|
|
* @private
|
|
* @param {Function} assigner The function to assign values.
|
|
* @returns {Function} Returns the new assigner function.
|
|
*/
|
|
function createAssigner(assigner) {
|
|
return function() {
|
|
var args = arguments,
|
|
length = args.length,
|
|
object = args[0];
|
|
|
|
if (length < 2 || object == null) {
|
|
return object;
|
|
}
|
|
var customizer = args[length - 2],
|
|
thisArg = args[length - 1],
|
|
guard = args[3];
|
|
|
|
if (length > 3 && typeof customizer == 'function') {
|
|
customizer = bindCallback(customizer, thisArg, 5);
|
|
length -= 2;
|
|
} else {
|
|
customizer = (length > 2 && typeof thisArg == 'function') ? thisArg : null;
|
|
length -= (customizer ? 1 : 0);
|
|
}
|
|
if (guard && isIterateeCall(args[1], args[2], guard)) {
|
|
customizer = length == 3 ? null : customizer;
|
|
length = 2;
|
|
}
|
|
var index = 0;
|
|
while (++index < length) {
|
|
var source = args[index];
|
|
if (source) {
|
|
assigner(object, source, customizer);
|
|
}
|
|
}
|
|
return object;
|
|
};
|
|
}
|
|
|
|
module.exports = createAssigner;
|