code: function extend(obj1, obj2) {
      var output = {}
      obj1 = obj1 || {}
      obj2 = obj2 || {}
  
      for (var k in obj1) output[k] = obj1[k]
      for (var l in obj2) output[l] = obj2[l]
  
      // className is a special case: we want to return the combination
      // of strings if both objects contain className
      var combinedClass = (typeof obj1.className === 'string') &&
                          (typeof obj2.className === 'string') &&
                          [obj1.className, obj2.className].join(' ')
      output.className = combinedClass || obj1.className || obj2.className
  
      return output
  }
docs: Merge two objects, producing a new object with their properties  Note: * the className property is treated as a special case and is merged * arguments are assumed to be object literals, which is why there are no hasOwnProperty() checks (see af/JSnoX/issues/3)