whole_func_string: function defineSubClassPure (superClass, constructor, methods, statics) {
          var normalizedArgs = normalizeArgsForDefineSubClass.apply(null, arguments),
              _superClass = normalizedArgs.superClass,
              _statics = normalizedArgs.statics,
              _constructor = normalizedArgs.constructor,
              _methods = normalizedArgs.methods;
  
          // Set prototype
          _constructor.prototype = Object.create(_superClass.prototype);
  
          // Define constructor
          Object.defineProperty(_constructor.prototype, 'constructor', {value: _constructor});
  
          // Extend constructor
          extend(_constructor.prototype, _methods);
          extend(_constructor, _statics, true);
  
          // Return constructor
          return _constructor;
      }
func_code_string: function defineSubClassPure (superClass, constructor, methods, statics) {
          var normalizedArgs = normalizeArgsForDefineSubClass.apply(null, arguments),
              _superClass = normalizedArgs.superClass,
              _statics = normalizedArgs.statics,
              _constructor = normalizedArgs.constructor,
              _methods = normalizedArgs.methods;
  
          // Set prototype
          _constructor.prototype = Object.create(_superClass.prototype);
  
          // Define constructor
          Object.defineProperty(_constructor.prototype, 'constructor', {value: _constructor});
  
          // Extend constructor
          extend(_constructor.prototype, _methods);
          extend(_constructor, _statics, true);
  
          // Return constructor
          return _constructor;
      }
func_documentation_string: Same as `defineSubClass` with out side-effect of `extend` method and `toString` method.
  @function module:sjl.defineSubClassPure
  @param superClass {Function} - Superclass to inherit from.
  @param constructor {Function|Object} - Required.  Note:  If this param is an object, then other params shift over by 1 (`methods` becomes `statics` and this param becomes `methods` (constructor key expected else empty stand in constructor is used).
  @param methods {Object|undefined} - Methods for prototype.  Optional.  Note:  If `constructor` param is an object, this param takes the place of the `statics` param.
  @param statics {Object|undefined} - Constructor's static methods.  Optional.  Note:  If `constructor` param is an object, this param is not used.
  @returns {Function} - Constructor with extended prototype and added statics.