Object prototype: case insensitive Getter On All Properties

I am trying to do Objectthat, when searching for a property, it does a “case-insensitive” search for this property.

var x = new CaseInsensitiveObject();

x.firstProperty = "Hello!";

alert(x.firstproperty); //alerts Hello!

I tried using Object.defineProperty()for this, but it requires a string literal for the property as a parameter (it Object.defineProperties()will have the same problem if you think about it).

Is there a way I can set for an object getterfor all properties of an object without specifying a 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 all properties, how can I set even one property to Objectbe case insensitive ?!

Note:

, Object.prototype , . - . , . - , , - . , , , .

!

+4
1

, @apsillers, ( . , case- Object, :

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 i = 0; i < keys.length; i++)
    {
        if(typeof keys[i] === 'string')
        {
            PropertyScope(obj, keys[i], obj[keys[i]]);
        }
    }

    return obj;
};

, , .

!

0

All Articles