function createAssigner(assigner) {
      return function() {
        var length = arguments.length,
            object = arguments[0];

        if (length < 2 || object == null) {
          return object;
        }
        if (length > 3 && isIterateeCall(arguments[1], arguments[2], arguments[3])) {
          length = 2;
        }
        // juggle arguments
        if (length > 3 && typeof arguments[length - 2] == 'function') {
          var customizer = baseCallback(arguments[--length - 1], arguments[length--], 5);
        } else if (length > 2 && typeof arguments[length - 1] == 'function') {
          customizer = arguments[--length];
        }
        var index = 0;
        while (++index < length) {
          assigner(object, arguments[index], customizer);
        }
        return object;
      };
    }
Creates a function that assigns properties of source object(s) to a given
destination object.

@private
@param {Function} assigner The function to handle assigning values.
@returns {Function} Returns the new assigner function.