sjl.js
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;
    }
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;
    }
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 ; }
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.
Same as defineSubClass with out side - effect of extend method and toString method .