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;
        }
function iterateProperties (_sub, _super) {
            var props = Object.getOwnPropertyNames(_super),
                proto;

            _sub.__proto__ = _super; 
            for(var i = 0, len = props.length; i < len; i++) {
                var prop = props[i];

                if (prop === '__proto__') {
                    proto = _super.__proto__; 
                }
                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;
        }
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 ; }
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
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