I'm looking for OOP tips or advice.    ;(function ( $, window, document, undefined ) {  if ( typeof Object.create !== 'function' ) {    Object.create = function (o) {        function F() {}        F.prototype = o;        return new F();    };  }  if (!Function.prototype.bind) { // check if native implementation available    Function.prototype.bind = function(){       var fn = this, args = Array.prototype.slice.call(arguments),          object = args.shift();       return function(){         return fn.apply(object,           args.concat(Array.prototype.slice.call(arguments)));       };     };  }  $.component = function( name, object ) {    $.fn[name] = function( options ) {      return this.each(function() {        if ( !$.data( this, name ) ) {          $.data( this, name, Object.create(object).init(             $.extend(true, {}, $.fn[name].opts, options), this )           );        }      });    };  };})( jQuery, window , document );(function ( $, window, document, undefined ) {  var dropdown = {    opts: {},    init: function( options, el ) {      this.$el = $(el).on('click.dropdown',         (function(evt){          this.toggle(evt);        }).bind(this)      );      this.opts = $.extend(true, this.opts, options);      this.isShowing = false;      return this;    },    show: function (evt) {      if(evt) evt.preventDefault(); evt.stopPropagation();      $(this.opts.header).addClass('show-mobile-nav');      this.isShowing = true;      this.bindClose();    },    hide: function (evt) {      if(evt) evt.preventDefault();      $(this.opts.header).removeClass('show-mobile-nav');      this.isShowing = false;      return this;    },    bindClose: function () {      $('html').on('click.dropdown',        (function(evt){          var $targ = $(event.target || window.event.srcElement),          targetIsNotDropdown = !$targ.is(this.opts.menu),          targetsNotAChildOfDropdown = $(this.opts.menu).has( $targ ).length == 0;          if( targetIsNotDropdown && targetsNotAChildOfDropdown) {            $('html').off('.dropdown');            this.hide();          }        }).bind(this)      );      return this;    },    toggle: function (evt) {      if(evt) evt.preventDefault();      if ( !this.isShowing ) {        this.show(evt);      } else {        this.hide(evt);      }    }  };  $.component('dropdown',dropdown);})( jQuery, window , document );
jQuery dropdown plugin
javascript;jquery;plugin