src/basis.js
function extendClass(source){
      var proto = this.prototype;

      if (typeof source == 'function' && !isClass(source))
        source = source(this.superClass_.prototype, slice(proto));

      if (source.prototype)
        source = source.prototype;

      for (var key in source)
      {
        var value = source[key];
        var protoValue = proto[key];

        if (key == 'className' || key == 'extendConstructor_')
          this[key] = value;
        else
        {
          if (protoValue && protoValue.__extend__)
            proto[key] = protoValue.__extend__(value);
          else
          {
            proto[key] = value;
            ///** @cut */ if (value && !value.__extend__ && (value.constructor == Object || value.constructor == Array)){ consoleMethods.warn('!' + key); }
          }
        }
      }

      // for browsers that doesn't enum toString
      if (TOSTRING_BUG && source[key = 'toString'] !== toString)
        proto[key] = source[key];

      return this;
    }
function extendClass(source){
      var proto = this.prototype;

      if (typeof source == 'function' && !isClass(source))
        source = source(this.superClass_.prototype, slice(proto));

      if (source.prototype)
        source = source.prototype;

      for (var key in source)
      {
        var value = source[key];
        var protoValue = proto[key];

        if (key == 'className' || key == 'extendConstructor_')
          this[key] = value;
        else
        {
          if (protoValue && protoValue.__extend__)
            proto[key] = protoValue.__extend__(value);
          else
          {
            proto[key] = value;
            ///** @cut */ if (value && !value.__extend__ && (value.constructor == Object || value.constructor == Array)){ consoleMethods.warn('!' + key); }
          }
        }
      }

      // for browsers that doesn't enum toString
      if (TOSTRING_BUG && source[key = 'toString'] !== toString)
        proto[key] = source[key];

      return this;
    }
function extendClass ( source ) { var proto = this . prototype ; if ( typeof source == 'function' && ! isClass ( source ) ) source = source ( this . superClass_ . prototype , slice ( proto ) ) ; if ( source . prototype ) source = source . prototype ; for ( var key in source ) { var value = source [ key ] ; var protoValue = proto [ key ] ; if ( key == 'className' || key == 'extendConstructor_' ) this [ key ] = value ; else { if ( protoValue && protoValue . __extend__ ) proto [ key ] = protoValue . __extend__ ( value ) ; else { proto [ key ] = value ; ///** @cut */ if (value && !value.__extend__ && (value.constructor == Object || value.constructor == Array)){ consoleMethods.warn('!' + key); } } } } // for browsers that doesn't enum toString if ( TOSTRING_BUG && source [ key = 'toString' ] !== toString ) proto [ key ] = source [ key ] ; return this ; }
Extend class prototype
@param {Object} source If source has a prototype, it will be used to extend current prototype.
@return {function()} Returns `this`.
Extend class prototype