code: function iterateProperties (_sub, _super) {
              var props = Object.getOwnPropertyNames(_super),
                  proto;
  
              _sub.__proto__ = _super; // jshint ignore:line
              for(var i = 0, len = props.length; i < len; i++) {
                  var prop = props[i];
  
                  if (prop === '__proto__') {
                      proto = _super.__proto__; // jshint ignore:line
                  }
                  else if(exclude.indexOf(i) === -1) {
                      var descriptor = Object.getOwnPropertyDescriptor(_sub, prop);
                      if(!descriptor) {
                          var superDescriptor = Object.getOwnPropertyDescriptor(_super, prop);
                          if(typeof superDescriptor.get !== 'function' && typeof _super[prop] === 'function') {
                              _sub[prop] = bindFunction(_sub, _super[prop]);
                          }
                          else {
                              bindProperty(_sub, _super, prop);
                          }
                      }
                  }
              }
  
              if(proto) iterateProperties(_sub, proto);
              return _sub;
          }
docs: Sets the properties on an obj from the given prototype.
  Used in the case that Object.setPrototypeOf and Object.__proto__ is unavailable, e.g. only IE < 11