code: function (r, s, px, sx) {
              if (!s || !r) {
                  return r;
              }
  
              var sp = s.prototype,
                  rp;
  
              // in case parent does not set constructor
              // eg: parent.prototype={};
              sp.constructor = s;
  
              // add prototype chain
              rp = createObject(sp, r);
              r.prototype = S.mix(rp, r.prototype);
              r.superclass = sp;
  
              // add prototype overrides
              if (px) {
                  S.mix(rp, px);
              }
  
              // add object overrides
              if (sx) {
                  S.mix(r, sx);
              }
  
              return r;
          }
docs: Utility to set up the prototype, constructor and superclass properties to
  support an inheritance strategy that can chain constructors and methods.
  Static members will not be inherited.
  @param r {Function} the object to modify
  @param s {Function} the object to inherit
  @param {Object} [px] prototype properties to add/override
  @param {Object} [sx] static properties to add/override
  @return r {Object}
  @member KISSY