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
Post a Comment