code: function creareSetGet( classProto ) {
  			// Storing key:value in separate variable as using original object will
  			// create infinit loop.
  			var valueStorage = {};
  			// Static is not supported.... will not support ie < 9;
  			// Adding setter and getter
  			classProto.prototype.$add = function( obj, key, val, isConst ) {
  
  				// val has a value for it's original object.
  				if (val != undefined) {
  					valueStorage[key] = val;
  				}
  
  				function setter( newval ) {
  					if (isConst) {
  						throw this + "." + key + " can not be changed.";
  					}
  					valueStorage[key] = newval;
  				}
  
  				function getter( ) {
  					return valueStorage[key];
  				}
  				/// ie dont include key created by setter getter if not intialized before
  				obj[key] = null;
  				if (Object.defineProperty && isGetterSetterSupported) {
  					Object.defineProperty(obj, key, {
  					    get : getter,
  					    set : setter
  					});
  				}
  				else if (obj.__defineGetter__) {
  					obj.__defineGetter__(key, getter);
  					obj.__defineSetter__(key, setter);
  				}
  				else {
  					obj[key] == undefined && (obj[key] = valueStorage[key]);
  				}
  			};
  		}
docs: This method is adding a $add method into class prototype wchich is being used to create setter and getter for its own property.