code: function ObjectIterator(keysOrObj, values) {
              var obj,
                  classOfParam0 = sjl.classOf(keysOrObj),
                  receivedParamTypesList,
                  _values,
                  _keys;
  
              // Constructor scenario 1 (if param `0` is of type `Object`)
              if (classOfParam0 === 'Object') {
                  obj = keysOrObj;
                  _keys = Object.keys(obj);
                  _values = _keys.map(function (key) {
                      return obj[key];
                  });
              }
  
              // Constructor scenario 2 (if param `0` is of type `Array`)
              else if (classOfParam0 === 'Array') {
                  sjl.throwTypeErrorIfNotOfType(contextName, 'values', values, Array,
                      'With the previous param being an array `values` can only be an array in this scenario.');
                  _keys = keysOrObj;
                  _values = values;
              }
  
              // Else failed constructor scenario
              else {
                  receivedParamTypesList = [classOfParam0, sjl.classOf(values)];
                  throw new TypeError ('#`' + contextName + '` received incorrect parameter values.  The expected ' +
                      'parameter list should be one of two: [Object] or [Array, Array].  ' +
                      'Parameter list received: [' + receivedParamTypesList.join(', ') + '].');
              }
  
              // Extend #own properties with #Iterator's own properties
              Iterator.call(this, _values);
  
              // @note Defining member jsdoc blocks here since our members are defined using Object.defineProperties()
              //   and some IDEs don't handle this very well (E.g., WebStorm)
  
              /**
               * Object iterator keys.  Set on construction.
               * @member {Array<*>} sjl.stdlib.ObjectIterator#keys
               * @readonly
               */
  
              // Define other own propert(y|ies)
              Object.defineProperty(this, '_keys', { value: _keys });
          }
docs: Constructor.
  @param keysOrObj {Array|Object} - Array of keys or object to create (object) iterator from.
  @param values {Array|Undefined} - Array of values if first param is an array.
  @constructor
  @private