let key
function isArray(arr) {
  return Array.isArray(arr) || arr instanceof Array
}

function isObject(obj) {
  return ({}).toString.call(obj) === '[object Object]'
}
let _extends = function (target, sources, deep) {
  for (key in sources)
    if (deep && isObject(sources[key]) || isArray(sources[key])) {
      if (isObject(sources[key]) && !isObject(target[key]))
        target[key] = {}
      if (isArray(sources[key]) && !isArray(target[key]))
        target[key] = []
      _extends(target[key], sources[key], deep)
    } else if (sources[key] != null)
      target[key] = sources[key]
}
// 第一个参数为boolean表示是否深复制
// 没有时,默认为浅复制
// 深复制:(true, target, sources1, sources2, ...)
// 浅复制:(target, sources1, sources2, ...)
export const extend = function (target) {
  let deep, args = Array.from(arguments).slice(1)

  if (typeof target == 'boolean') {
    deep = target
    target = args.shift()
  }
  args.forEach(ele => _extends(target, ele, deep))
  return target
}