docs: function getBaseClassObject( base, $arr ) {
  			function addAllBaseInfo( ) {
  				var v, arr = $arr;
  				var proto = baseClassObject.prototype;
  				var constList = proto.$get("Const"), isConst;
  				for ( var k in baseClassObject) {
  					if (baseClassObject.hasOwnProperty(k)) {
  						isConst = constList.hasOwnProperty(k);
  						v = baseClassObject[k];
  						if (typeof v == 'function') {
  							if (k == '$add') {
  								continue;
  							}
  							for ( var l = arr.length - 1; l >= 0; l--) {
  								if (arr[l][k] != undefined)
  									break;
  								arr[l][k] = v;
  							}
  						}
  						else {
  							isConst && baseClassObject.$add(baseClassObject, k, v, isConst);
  							for ( var m = arr.length - 1; m >= 0; m--) {
  								if (arr[m][k] != undefined)
  									break;
  								baseClassObject.$add(arr[m], k, undefined, isConst);
  							}
  						}
  					}
  				}
  				// deleteing $add as all operations on $add are completed for this
  				// instance.
  				delete baseClassObject.$add;
  				var currentClass = arr.pop();
  	            !currentClass.isAbstract && currentClass.base.prototype.isAbstract && currentClass.base.prototype.setAbstractMethods(currentClass);
  				currentClass.base = baseClassObject;
  				//Object.seal(currentClass);
  			}
  
  			base.prototype.get$arr = function( ) {
  				return $arr;
  			};
  			base.prototype.__base___ = true;
  			var baseClassObject = new base();
  			delete base.prototype.__base___;
  			delete base.prototype.get$arr;
  			var baseObj = changeContext(baseClassObject.constructor, baseClassObject, addAllBaseInfo);
  			baseObj.prototype = baseClassObject;
  			baseObj.$ADD = function( o ) {
  				$arr.unshift(o);
  				delete baseObj.$ADD;
  			};
  			return baseObj;
  		}