Pour cela, je préfère utiliser le prototype plutôt qu'une fonction autonome, simplement pour la facilité d'utilisation et l'expressivité. Je n'aime pas faire passer des objets dans des fonctions si je n'y suis pas obligé.
De plus, bien que la réponse acceptée fonctionne, je voulais une solution plus complète pour l'obtention et le réglage qui se comporterait autant que possible comme la notation native par points ou par crochets.
C'est dans cet esprit que j'ai créé quelques prototypes de fonctions permettant de définir et d'obtenir une propriété d'objet sans tenir compte de la casse. Vous devez vous rappeler d'être TRES responsable lors de l'ajout au prototype de l'objet. Surtout quand on utilise JQuery et d'autres bibliothèques. Object.defineProperty() avec enumerable réglé sur false a été utilisé spécifiquement pour éviter tout conflit avec JQuery. Je n'ai pas non plus pris la peine de nommer les fonctions de manière à indiquer qu'elles sont insensibles à la casse, mais vous pourriez certainement le faire. J'aime les noms courts.
Voici l'attrape-nigaud :
Object.defineProperty(Object.prototype, "getProp", {
value: function (prop) {
var key,self = this;
for (key in self) {
if (key.toLowerCase() == prop.toLowerCase()) {
return self[key];
}
}
},
//this keeps jquery happy
enumerable: false
});
Voici le passeur :
Object.defineProperty(Object.prototype, "setProp", {
value: function (prop, val) {
var key,self = this;
var found = false;
if (Object.keys(self).length > 0) {
for (key in self) {
if (key.toLowerCase() == prop.toLowerCase()) {
//set existing property
found = true;
self[key] = val;
break;
}
}
}
if (!found) {
//if the property was not found, create it
self[prop] = val;
}
return val;
},
//this keeps jquery happy
enumerable: false
});
Maintenant que nous avons créé ces fonctions, notre code est super propre et concis et fonctionne tout simplement.
Obtention insensible à la casse :
var obj = {foo: 'bar', camelCase: 'humpy'}
obj.getProp("FOO"); //returns 'bar'
obj.getProp("fOO"); //returns 'bar'
obj.getProp("CAMELCASE"); //returns 'humpy'
obj.getProp("CamelCase"); //returns 'humpy'
Réglage insensible à la casse :
var obj = {foo: 'bar', camelCase: 'humpy'}
obj.setProp('CAmelCasE', 'super humpy'); //sets prop 'camelCase' to 'super humpy'
obj.setProp('newProp', 'newval'); //creates prop 'newProp' and sets val to 'newval'
obj.setProp('NewProp', 'anotherval'); //sets prop 'newProp' to 'anotherval'