sjl.js
function SjlSet (iterable) {
            var self = this,
                _values = [];

            // Define own props
            Object.defineProperties(this, {
                /**
                 * @name _values
                 * @member {Array<*>} sjl.stdlib.SjlSet#_values - Where the values are kept on the Set.  Default `[]`.
                 * @readonly
                 */
                _values: {
                    value: _values
                },

                /**
                 * @name size
                 * @member {Number} sjl.stdlib.SjlSet#size - Size of Set.  Default `0`.
                 * @readonly
                 */
                size: {
                    get: function () {
                        return _values.length;
                    },
                    enumerable: true
                }
            });

            // If an array was passed in inject values
            if (sjl.classOfIs(iterable, 'Array')) {
                self.addFromArray(iterable);
            }

            // If anything other than an array is passed in throw an Error
            else if (typeof iterable !== _undefined) {
                throw new Error ('Type Error: sjl.SjlSet takes only iterable objects as it\'s first parameter. ' +
                    ' Parameter received: ', iterable);
            }

            // Make our `_values` array inherit our special iterator
            makeIterable(_values);

            // Set custom iterator function on `this`
            self[sjl.Symbol.iterator] = function () {
                return new ObjectIterator(_values, _values);
            };

            /**
             * Flag for knowing that default es6 iterator was overridden.  Set on construction.
             * @name _iteratorOverridden
             * @member {Boolean} sjl.stdlib.SjlSet#_iteratorOverridden.  Default `true`.
             * @readonly
             */

            // Set flag to remember that original iterator was overridden
            Object.defineProperty(self, '_iteratorOverridden', {value: true});
        }
function SjlSet (iterable) {
            var self = this,
                _values = [];

            // Define own props
            Object.defineProperties(this, {
                /**
                 * @name _values
                 * @member {Array<*>} sjl.stdlib.SjlSet#_values - Where the values are kept on the Set.  Default `[]`.
                 * @readonly
                 */
                _values: {
                    value: _values
                },

                /**
                 * @name size
                 * @member {Number} sjl.stdlib.SjlSet#size - Size of Set.  Default `0`.
                 * @readonly
                 */
                size: {
                    get: function () {
                        return _values.length;
                    },
                    enumerable: true
                }
            });

            // If an array was passed in inject values
            if (sjl.classOfIs(iterable, 'Array')) {
                self.addFromArray(iterable);
            }

            // If anything other than an array is passed in throw an Error
            else if (typeof iterable !== _undefined) {
                throw new Error ('Type Error: sjl.SjlSet takes only iterable objects as it\'s first parameter. ' +
                    ' Parameter received: ', iterable);
            }

            // Make our `_values` array inherit our special iterator
            makeIterable(_values);

            // Set custom iterator function on `this`
            self[sjl.Symbol.iterator] = function () {
                return new ObjectIterator(_values, _values);
            };

            /**
             * Flag for knowing that default es6 iterator was overridden.  Set on construction.
             * @name _iteratorOverridden
             * @member {Boolean} sjl.stdlib.SjlSet#_iteratorOverridden.  Default `true`.
             * @readonly
             */

            // Set flag to remember that original iterator was overridden
            Object.defineProperty(self, '_iteratorOverridden', {value: true});
        }
Constructor.
@param iterable {Array} - Optional.
@private
@constructor