docs: 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;
      }