code: function mergeObjects(origin, add) {
      "use strict";
  
      if (phantom.casperEngine === 'slimerjs') {
          // Because of an issue in the module system of slimerjs (security membranes?)
          // constructor is undefined.
          // let's use an other algorithm
          return mergeObjectsInSlimerjs(origin, add);
      }
      for (var p in add) {
          if (add[p] && add[p].constructor === Object) {
              if (origin[p] && origin[p].constructor === Object) {
                  origin[p] = mergeObjects(origin[p], add[p]);
              } else {
                  origin[p] = clone(add[p]);
              }
          } else {
              origin[p] = add[p];
          }
      }
      return origin;
  }
docs: Object recursive merging utility.
  
  @param  Object  origin  the origin object
  @param  Object  add     the object to merge data into origin
  @return Object