La propriété d'un objet en JavaScript possède trois attributs :
1.writable. Si la propriété est accessible en écriture.
2.énumérable. Indique si la propriété sera énumérée lors de l'utilisation de l'instruction for/in.
3. configurable. Si les propriétés de cette propriété peuvent être modifiées et si la propriété peut être supprimée.
Dans la norme ECMAScript 3, les valeurs des trois propriétés ci-dessus sont toutes vraies et ne peuvent pas être modifiées : la propriété du nouvel objet est inscriptible, énumérable et supprimable dans la norme ECMAScript 5 ; les propriétés peuvent être configurées et modifiées via l'objet de description de propriété (descripteur de propriété).
Si les informations sur la valeur de la propriété sont également considérées comme l'attribut de la propriété, la propriété dans l'objet a quatre attributs : valeur, inscriptible, énumérable et configurable.
Pour une propriété définie avec les méthodes getter et setter, puisqu'elle n'a pas d'attribut inscriptible (le fait que la propriété soit inscriptible dépend de l'existence ou non de la méthode setter), cette propriété a également quatre attributs : get, set, énumérable et configurable — La valeur des propriétés get et set est une fonction.
Obtenir les propriétés de la propriété de l'objet
Dans la norme ECMAScript 5, vous pouvez obtenir les informations de propriété d'une certaine propriété de l'objet lui-même via Object.getOwnPropertyDescriptor( ):
var o = {x:1}; var a = Object.create(o); a.y = 3; console.log(Object.getOwnPropertyDescriptor(a, "y"));//Object {configurable=true, enumerable=true, writable=true, value=3} console.log(Object.getOwnPropertyDescriptor(a, "x"));//undefined
Comme vous pouvez le voir, si la propriété n'existe pas ou si la propriété hérite de l'objet prototype, undefined est renvoyé.
Définir les propriétés de la propriété de l'objet
Dans le standard ECMAScript 5, vous pouvez définir la propriété d'une propriété de l'objet lui-même via Object.defineProperty() :
Object.defineProperty(a, "y", { value:3, writable:true, enumerable:false, configuration:true }); console.log(a.propertyIsEnumerable("y"));//false
Si la propriété set est héritée de l'objet prototype, alors JavaScript créera une propriété du même nom dans l'objet lui-même, ce qui est cohérent avec le comportement associé de l'opération d'affectation :
Object.defineProperty(a, "x", { value:1, writable:true, enumerable:false, configuration:true }); console.log(a.propertyIsEnumerable("x"));//false console.log(o.propertyIsEnumerable("x"));//true
Sauf Pour modifier les propriétés d'une propriété, vous pouvez également changer la propriété accessible à l'aide d'un getter ou d'un setter :
Object.defineProperty(a, "y", { get:function(){return 42;} }); console.log(a.y);//42
Lors de l'utilisation de Object.defineProperty(), la valeur de la propriété dans l'objet de description de la propriété peut être partiellement ignoré. Lorsque la valeur de la propriété est ignorée, les règles de traitement en JavaScript sont les suivantes :
Si la propriété est nouvellement créée, toutes les valeurs de propriété ignorées seront fausses ou indéfini.
Si la propriété existe déjà, toutes les valeurs de propriété ignorées restent inchangées.
Définissez les propriétés des propriétés d'objet par lots
Si vous devez définir les propriétés de plusieurs propriétés à la fois, vous pouvez utiliser l'instruction Object.defineProperties(). Cette instruction renverra l'objet modifié.
Object.defineProperties(a, { "y":{value:79, writable:true, enumerable:true, configurable:true}, "z":{value:99, writable:true, enumerable:true, configurable:true} }); console.log(a);//Object {y=79, z=99}
Règles de définition de l'attribut de propriété
Lors de la modification de l'attribut de propriété, les règles suivantes doivent être respectées. Si les règles ne sont pas respectées, JavaScript signalera une TypeError :
Si l'objet n'est pas extensible, vous ne pouvez modifier que les propriétés des propriétés existantes et ne pouvez pas ajouter de nouvelles propriétés.
Si l'attribut configurable de la propriété est faux, les valeurs des attributs configurables et énumérables ne peuvent pas être modifiées. Pour l'attribut inscriptible, vous pouvez le changer de vrai à faux, mais vous ne pouvez pas le changer de faux à vrai. . Si une propriété est définie par des getters et des setters, les méthodes getter et setter ne peuvent pas être modifiées.
Si l'attribut configurable et l'attribut inscriptible de la propriété sont tous deux faux, la valeur de la propriété ne peut pas être modifiée. Si l'attribut inscriptible de la propriété est faux mais que son attribut configurable est vrai, la valeur de la propriété peut toujours être modifiée.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!