javascript - Object Prototype: Case Insensitive Getter On All Properties -


i trying make object who, when search property, performs "look-up" of property case-insensitively.

var x = new caseinsensitiveobject();  x.firstproperty = "hello!";  alert(x.firstproperty); //alerts hello! 

i've tried using object.defineproperty() this, yet requires string literal property parameter (object.defineproperties() have same problem if think it).

is there way can generic set getter object properties of object without providing key name? i.e:

object.defineallproperties(obj, {     get: function(prop)     {         if(!prop.tolowercase && prop.tostring)             prop = prop.tostring();         if(prop.tolowercase)             prop = prop.tolowercase();         return this[prop];     } }); 

if not properties, how set even 1 property of object case insensitive?!

note:

i understand extending object.prototype bad thing do, have reasons. need quick fix due database changes. eventual fix take days do, , need running software qa test against until then. prototype method make work while make of necessary changes, , method not put production environment. so, if plan on shooting me down , yelling @ me thinking doing this, i'm not listening.

thanks everybody!

so, after following @apsillers comment, did solve problem (i needed support lower-case , camel-case. not consider ideal , not answer question of making case-insensitive object property, should share:

function makecaseinsensitiveobject(obj) {     var keys;      function propertyscope(iobj, key, val)     {         var value = val;          var _get = function()         {             return value;         };          var _set = function(v)         {             value = v;         };          object.defineproperty(iobj, key, {             get: _get,             set: _set         });          object.defineproperty(iobj, key.tolowercase(), {             get: _get,             set: _set         });     };      if(object.keys)         keys = object.keys(obj);     else         keys = getobjectkeys(obj);      for(var = 0; < keys.length; i++)     {         if(typeof keys[i] === 'string')         {             propertyscope(obj, keys[i], obj[keys[i]]);         }     }      return obj; }; 

be aware case-insensitivity here apply existing object properties, not new ones.

thanks everybody!


Comments

Popular posts from this blog

powershell Start-Process exit code -1073741502 when used with Credential from a windows service environment -

twig - Using Twigbridge in a Laravel 5.1 Package -

c# - LINQ join Entities from HashSet's, Join vs Dictionary vs HashSet performance -