collection.js
function copy() {
  var result = {}
    , depth = 2
    , seen = [];

  (function worker() {
    each(array(arguments), function each(obj) {
      for (var prop in obj) {
        if (hasOwn.call(obj, prop) && !~index(seen, obj[prop])) {
          if (type(obj[prop]) !== 'object' || !depth) {
            result[prop] = obj[prop];
            seen.push(obj[prop]);
          } else {
            depth--;
            worker(result[prop], obj[prop]);
          }
        }
      }
    });
  }).apply(null, arguments);

  return result;
}
function copy() {
  var result = {}
    , depth = 2
    , seen = [];

  (function worker() {
    each(array(arguments), function each(obj) {
      for (var prop in obj) {
        if (hasOwn.call(obj, prop) && !~index(seen, obj[prop])) {
          if (type(obj[prop]) !== 'object' || !depth) {
            result[prop] = obj[prop];
            seen.push(obj[prop]);
          } else {
            depth--;
            worker(result[prop], obj[prop]);
          }
        }
      }
    });
  }).apply(null, arguments);

  return result;
}
function copy ( ) { var result = { } , depth = 2 , seen = [ ] ; ( function worker ( ) { each ( array ( arguments ) , function each ( obj ) { for ( var prop in obj ) { if ( hasOwn . call ( obj , prop ) && ! ~ index ( seen , obj [ prop ] ) ) { if ( type ( obj [ prop ] ) !== 'object' || ! depth ) { result [ prop ] = obj [ prop ] ; seen . push ( obj [ prop ] ) ; } else { depth -- ; worker ( result [ prop ] , obj [ prop ] ) ; } } } } ) ; } ) . apply ( null , arguments ) ; return result ; }
Merge all given objects in to one objects.

@returns {Object}
@api public
Merge all given objects in to one objects .