docs: function inherit(child, parent, options) {
    
    if (options && options.deepExtend) {
      
      //copy all members of parents to this (the child)
      deepExtend(child, parent);
    
    } else {
    
      extend(child, parent);
    
    }
    
    //constructor helper
    function ctor() { this.constructor = child; }
    
    //set ctor prototype to the parent's
    ctor.prototype = parent.prototype;
    
    // Put the parent's prototype in the child's prototype hierarchy
    //
    // i.e. set the child's prototype to new object such that
    //
    // (1) child.prototype.constructor = parent.contructor = child
    // (2) child.prototype.__proto__   = parent.__proto__ 
    //                                 = ctor.prototype 
    //                                 = parent.prototype
    //
    child.prototype = extend(new ctor, child.prototype, {overwrite: true});
    
    //save the parent's prototype for future reference
    child.__super__ = parent;
  }