44 lines
1.1 KiB
JavaScript
44 lines
1.1 KiB
JavaScript
![]() |
var arrayEach = require('../array/arrayEach')
|
||
|
var keys = require('../base/keys')
|
||
|
var isArray = require('../base/isArray')
|
||
|
var clone = require('../base/clone')
|
||
|
|
||
|
var objectAssignFns = Object.assign
|
||
|
|
||
|
function handleAssign (destination, args, isClone) {
|
||
|
var len = args.length
|
||
|
for (var source, index = 1; index < len; index++) {
|
||
|
source = args[index]
|
||
|
arrayEach(keys(args[index]), isClone ? function (key) {
|
||
|
destination[key] = clone(source[key], isClone)
|
||
|
} : function (key) {
|
||
|
destination[key] = source[key]
|
||
|
})
|
||
|
}
|
||
|
return destination
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* 浅拷贝一个或者多个对象到目标对象中
|
||
|
*
|
||
|
* @param {Object} obj 目标对象
|
||
|
* @param {...Object}
|
||
|
* @return {Boolean}
|
||
|
*/
|
||
|
var assign = function (target) {
|
||
|
if (target) {
|
||
|
var args = arguments
|
||
|
if (target === true) {
|
||
|
if (args.length > 1) {
|
||
|
target = isArray(target[1]) ? [] : {}
|
||
|
return handleAssign(target, args, true)
|
||
|
}
|
||
|
} else {
|
||
|
return objectAssignFns ? objectAssignFns.apply(Object, args) : handleAssign(target, args)
|
||
|
}
|
||
|
}
|
||
|
return target
|
||
|
}
|
||
|
|
||
|
module.exports = assign
|