code: function _assignGenerator(own) {
      let _copy = function(target, ...source) {
          let deep = true;
          if (is.Boolean(target)) {
              deep = target;
              target = 0 in source
                  ? source.shift()
                  : null;
          }
  
          if (is.Array(target)) {
              source.forEach(sc => {
                  target.push(...sc);
              });
          } else if (is.Object(target)) {
              source.forEach(sc => {
                  for (let key in sc) {
                      if (own && !sc.hasOwnProperty(key))
                          continue;
                      let so = sc[key],
                          to = target[key];
                      if (is.PureObject(so)) {
                          target[key] = deep
                              ? extend(true, is.PureObject(to)
                                  ? to
                                  : {}, so)
                              : so;
                      } else if (is.Array(so)) {
                          target[key] = deep
                              ? extend(true, is.Array(to)
                                  ? to
                                  : [], so)
                              : so;
                      } else {
                          target[key] = so;
                      }
                  }
              });
          }
          // Do nothing
          return target;
      };
      return _copy;
  }
docs: Assign function generator