index.js
function createCollection(proto, objectOnly){
    function Collection(a){
      if (!this || this.constructor !== Collection) return new Collection(a);
      this._keys = [];
      this._values = [];
      this._itp = []; // iteration pointers
      this.objectOnly = objectOnly;

      //parse initial iterable argument passed
      if (a) init.call(this, a);
    }

    //define size for non object-only collections
    if (!objectOnly) {
      defineProperty(proto, 'size', {
        get: sharedSize
      });
    }

    //set prototype
    proto.constructor = Collection;
    Collection.prototype = proto;

    return Collection;
  }
function createCollection(proto, objectOnly){
    function Collection(a){
      if (!this || this.constructor !== Collection) return new Collection(a);
      this._keys = [];
      this._values = [];
      this._itp = []; // iteration pointers
      this.objectOnly = objectOnly;

      //parse initial iterable argument passed
      if (a) init.call(this, a);
    }

    //define size for non object-only collections
    if (!objectOnly) {
      defineProperty(proto, 'size', {
        get: sharedSize
      });
    }

    //set prototype
    proto.constructor = Collection;
    Collection.prototype = proto;

    return Collection;
  }
function createCollection ( proto , objectOnly ) { function Collection ( a ) { if ( ! this || this . constructor !== Collection ) return new Collection ( a ) ; this . _keys = [ ] ; this . _values = [ ] ; this . _itp = [ ] ; // iteration pointers this . objectOnly = objectOnly ; //parse initial iterable argument passed if ( a ) init . call ( this , a ) ; } //define size for non object-only collections if ( ! objectOnly ) { defineProperty ( proto , 'size' , { get : sharedSize } ) ; } //set prototype proto . constructor = Collection ; Collection . prototype = proto ; return Collection ; }
ES6 collection constructor
@return {Function} a collection class
ES6 collection constructor