dizballanze

Пример замыканий

Jun 8th, 2011
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.         function addProtectedVar(object, name, validator){
  2.             if (! typeof(object) == "object")
  3.                 throw new Error("Object required for the first argument!");
  4.             if (name.length == 0)
  5.                 throw new Error("Set name of variable to the second argument!");
  6.             if (validator && (typeof(validator)!="function"))
  7.                 throw new Error("Third argument must be a function!");
  8.             if (validator && validator.length != 1)
  9.                 throw new Error("Validator function must receive 1 argument!");
  10.             camel_name = name.charAt(0).toUpperCase() + name.substr(1);
  11.             if (object.hasOwnProperty('set' + camel_name) || object.hasOwnProperty('get' + camel_name))
  12.                 throw new Error("Object already has method/property set" + camel_name + ' or get' + camel_name);
  13.             functions = (function(name, validator){
  14.                 var property;
  15.                 var variable_name = name;
  16.                 return {
  17.                     get:function(){
  18.                         return property;
  19.                     },
  20.                     set:function(value){
  21.                         if (validator){
  22.                             if (validator(value))
  23.                                 property = value;
  24.                             else
  25.                                 throw new Error("Wrong value for \"" + variable_name + "\" property!");
  26.                         }else{
  27.                             property = value;
  28.                         }
  29.                     }
  30.                 };
  31.             })(name,validator);
  32.             object["get" + camel_name] = functions["get"];
  33.             object["set" + camel_name] = functions["set"];
  34.         }
  35.        
  36.         var object = {x:1, y:2};
  37.         try{
  38.             addProtectedVar(object, 'secret', function(val){return val > 0});
  39.             addProtectedVar(object, 'secret2', function(val){return (val % 2) == 0});
  40.             addProtectedVar(object, 'secret3', function(val){return (val % 2) == 0});
  41.             object.setSecret(12);
  42.             object.getSecret(); // 12
  43.             object.setSecret2(4);
  44.         }catch(e){
  45.             console.error(e);
  46.         }
Advertisement
Add Comment
Please, Sign In to add comment