« je me suis dit que si les objets ont une hasOwnProperty
ils devraient aussi avoir un getOwnProperty
et un setOwnProperty
»
La fonction hasOwnProperty()
vous indique si la propriété nommée existe comme une propriété directe de l'objet, par rapport à être une propriété héritée de quelque part dans la chaîne prototype de l'objet. L'opérateur in
- utilisé comme if (someProperty in someObject) {}
- vous dira si l'objet possède cette propriété n'importe où dans la chaîne du prototype.
Vous n'avez pas besoin d'une fonction setOwnProperty()
correspondante parce que vous pouvez simplement dire:
someObject[someProperty] = someValue;
Je suppose que l'idée d'une fonction correspondante getOwnProperty()
sorte de logique si vous voulez une fonction qui renvoie uniquement une valeur si la propriété spécifiée est une propriété directe, mais il n'y aurait aucun moyen d'indiquer que la propriété spécifiée n'a pas été trouvée, car null, undefined, false, etc. sont toutes des valeurs potentielles légitimes si la propriété est. Donc, pour y parvenir, vous devez le faire en deux étapes en utilisant if (hasOwnProperty())
.
Mais ce n'est pas ce que vous essayez de faire. Si je vous comprends bien, vous voulez juste un moyen de définir une propriété où le nom de la propriété est dans une variable (dans votre cas, un élément de tableau).Vous n'indiquez pas clairement les valeurs que vous souhaitez associer à ces propriétés. Je vais donc utiliser true
.
var arr = ['has_cats', 'has_dogs'];
var obj = {}; // note {} is generally preferred to new Object();
for(var i=0; i < arr.length; i++) {
// if the property doesn't already exist directly on
// the object
if(!obj.hasOwnProperty(arr[i])) {
// set the object property
obj[arr[i]] = true;
}
}
// can access with bracket notation
alert(obj["has_cats"]);
// can access with dot notation
alert(obj.has_cats);
Me battre de 10 secondes :( – karim79
m'arrive tout le temps;) – mikeycgto
a voté pour vous la réponse mais a choisi une autre pour l'effort. Merci les gars d'avoir répondu. –