jsfm.js
function addExtras( currentObj, baseObj, fn ) {
			// Return function name.
			var clss = currentObj.getClass();
			for ( var k in currentObj) {
				if (currentObj.hasOwnProperty(k) && typeof currentObj[k] == 'function' && k != fn) {
					currentObj[k] = currentObj[k].bind(currentObj);
					currentObj[k].$name = k;
					currentObj[k].$Class = clss;
				}
			}

			addInstance(currentObj);

			// eachPropertyOf(currentObj.Private, function(val, key){
			if (currentObj.Private && typeof currentObj.Private[fn] == 'function') {
				currentObj[fn] = currentObj.Private[fn];
			}
			if (currentObj[fn]) {
				currentObj[fn].$Class = currentObj.getClass();
				currentObj[fn].$name = fn;
			}
			// Check if function have constant.
			if (currentObj.Const) {
				var cnt = currentObj.Const;
				delete cnt.Static;
				for (k in cnt) {
					cnt.hasOwnProperty(k) && currentObj.$add(currentObj, k, cnt[k], true);
				}
			}
			// migrate information about abstract method to base class.
			if (currentObj.isAbstract) {
				var absMethods = currentObj.prototype.$get("Abstract");
				currentObj.setAbstractMethods = function( solidObj ) {
					for ( var k in absMethods) {
						if (absMethods.hasOwnProperty(k)) {
							if (typeof solidObj[k] != 'function') {
								throw "Abstract method " + k + " is not implemented by " + solidObj.getClass();
							}
							this[k] = solidObj[k];
						}
					}
					if (baseObj && baseObj.prototype.isAbstract) {
						baseObj.prototype.setAbstractMethods(solidObj);
					}
				};
			}

			if (baseObj) {
				if (baseObj.prototype.isAbstract) {
					baseObj.prototype.getSub = function( ) {
						return currentObj.isAbstract ? currentObj.getSub() : currentObj;
					};
				}
				currentObj.base = baseObj;
				baseObj.$ADD(currentObj);
			}
		}
function addExtras( currentObj, baseObj, fn ) {
			// Return function name.
			var clss = currentObj.getClass();
			for ( var k in currentObj) {
				if (currentObj.hasOwnProperty(k) && typeof currentObj[k] == 'function' && k != fn) {
					currentObj[k] = currentObj[k].bind(currentObj);
					currentObj[k].$name = k;
					currentObj[k].$Class = clss;
				}
			}

			addInstance(currentObj);

			// eachPropertyOf(currentObj.Private, function(val, key){
			if (currentObj.Private && typeof currentObj.Private[fn] == 'function') {
				currentObj[fn] = currentObj.Private[fn];
			}
			if (currentObj[fn]) {
				currentObj[fn].$Class = currentObj.getClass();
				currentObj[fn].$name = fn;
			}
			// Check if function have constant.
			if (currentObj.Const) {
				var cnt = currentObj.Const;
				delete cnt.Static;
				for (k in cnt) {
					cnt.hasOwnProperty(k) && currentObj.$add(currentObj, k, cnt[k], true);
				}
			}
			// migrate information about abstract method to base class.
			if (currentObj.isAbstract) {
				var absMethods = currentObj.prototype.$get("Abstract");
				currentObj.setAbstractMethods = function( solidObj ) {
					for ( var k in absMethods) {
						if (absMethods.hasOwnProperty(k)) {
							if (typeof solidObj[k] != 'function') {
								throw "Abstract method " + k + " is not implemented by " + solidObj.getClass();
							}
							this[k] = solidObj[k];
						}
					}
					if (baseObj && baseObj.prototype.isAbstract) {
						baseObj.prototype.setAbstractMethods(solidObj);
					}
				};
			}

			if (baseObj) {
				if (baseObj.prototype.isAbstract) {
					baseObj.prototype.getSub = function( ) {
						return currentObj.isAbstract ? currentObj.getSub() : currentObj;
					};
				}
				currentObj.base = baseObj;
				baseObj.$ADD(currentObj);
			}
		}
function addExtras ( currentObj , baseObj , fn ) { // Return function name. var clss = currentObj . getClass ( ) ; for ( var k in currentObj ) { if ( currentObj . hasOwnProperty ( k ) && typeof currentObj [ k ] == 'function' && k != fn ) { currentObj [ k ] = currentObj [ k ] . bind ( currentObj ) ; currentObj [ k ] . $name = k ; currentObj [ k ] . $Class = clss ; } } addInstance ( currentObj ) ; // eachPropertyOf(currentObj.Private, function(val, key){ if ( currentObj . Private && typeof currentObj . Private [ fn ] == 'function' ) { currentObj [ fn ] = currentObj . Private [ fn ] ; } if ( currentObj [ fn ] ) { currentObj [ fn ] . $Class = currentObj . getClass ( ) ; currentObj [ fn ] . $name = fn ; } // Check if function have constant. if ( currentObj . Const ) { var cnt = currentObj . Const ; delete cnt . Static ; for ( k in cnt ) { cnt . hasOwnProperty ( k ) && currentObj . $add ( currentObj , k , cnt [ k ] , true ) ; } } // migrate information about abstract method to base class. if ( currentObj . isAbstract ) { var absMethods = currentObj . prototype . $get ( "Abstract" ) ; currentObj . setAbstractMethods = function ( solidObj ) { for ( var k in absMethods ) { if ( absMethods . hasOwnProperty ( k ) ) { if ( typeof solidObj [ k ] != 'function' ) { throw "Abstract method " + k + " is not implemented by " + solidObj . getClass ( ) ; } this [ k ] = solidObj [ k ] ; } } if ( baseObj && baseObj . prototype . isAbstract ) { baseObj . prototype . setAbstractMethods ( solidObj ) ; } } ; } if ( baseObj ) { if ( baseObj . prototype . isAbstract ) { baseObj . prototype . getSub = function ( ) { return currentObj . isAbstract ? currentObj . getSub ( ) : currentObj ; } ; } currentObj . base = baseObj ; baseObj . $ADD ( currentObj ) ; } }
Add extra information into newly created object.
Add extra information into newly created object .