Skip to content

Instantly share code, notes, and snippets.

@mrgenixus
Forked from marshallds/Getter Setter
Last active December 15, 2015 20:49
Show Gist options
  • Save mrgenixus/5321149 to your computer and use it in GitHub Desktop.
Save mrgenixus/5321149 to your computer and use it in GitHub Desktop.
var double = function(a){ return a * 2; }
var getterSetter = (function(){ //don't work in the global scope
var process_validation = function(validation_params){
if (validation_params) return function(val){
// do magjiks
if (validation_params.filter) val = val.match(validation_params.filter)[0];
if (validation.process && typeof validation.process == 'function') val = validation.process(val);
if (validation_params.min) val = Math.max(val,validation_params.min);
if (validation_params.max) val = Math.min(val,validation_params.max);
return val;
}
return function(val){
return val; //don't do any magic
}
}
var getterSetter = function(validation_params){
var _val = (validation_params && validation_params.defaultVal) || undefined;
var process = process_validation(validation_params);
return function(val){
if (typeof val == 'function'){ val = val(_val) }
val = process(val);
return _val = val || _val;
}
}
return getterSetter;
})();
var validation = {
width:{
min:0,
max:960,
filter:/\d+/,
process: Math.round
}
}
var StateObject = function(){};
for ( method in validation){
StateObject.prototype[method] = getterSetter(validation[method]);
}
StateObject.prototype.doubleWidth = function(){
return this.width(double);
}
var StateInstanceObject = function(){
for ( method in validation){
this[method] = getterSetter(validation[method]);
}
this.doubleWidth = function(){
return this.width(double);
}
}
var state = new StateObject();
var stateInstance = new StateInstance();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment