code: function(source) {
      var copy, i, len, prop;
      if (typeof source !== "object" || source == null || typeof source.nodeType === "number") {
        copy = source;
      } else if (typeof source.length === "number") {
        copy = [];
        for (i = 0, len = source.length; i < len; i++) {
          if (_hasOwn.call(source, i)) {
            copy[i] = _deepCopy(source[i]);
          }
        }
      } else {
        copy = {};
        for (prop in source) {
          if (_hasOwn.call(source, prop)) {
            copy[prop] = _deepCopy(source[prop]);
          }
        }
      }
      return copy;
    }
docs: Return a deep copy of the source object or array.
  
  @returns Object or Array
  @private