Maison > interface Web > js tutoriel > le corps du texte

Quelques choses que vous pouvez faire avec les objets JavaScript

hzc
Libérer: 2020-06-06 17:17:00
avant
2002 Les gens l'ont consulté

En plus de l'attribution et du parcours de propriétés d'objet ordinaires, nous pouvons également effectuer de nombreuses autres opérations avec des objets JavaScript. Dans cet article, nous apprendrons comment les utiliser, notamment accéder aux propriétés internes, manipuler les descripteurs de propriétés et hériter des propriétés en lecture seule.

1. Accéder aux propriétés internes


Propriétés internes des objets JavaScript inaccessibles de manière conventionnelle. Les noms de propriétés internes sont placés entre crochets [[]] et sont disponibles lors de la création d'un objet.

Les propriétés internes ne peuvent pas être ajoutées dynamiquement aux objets existants.

Les propriétés internes peuvent être utilisées dans certains objets JavaScript intégrés, qui stockent l'état interne spécifié par la spécification ECMAScript.

a deux propriétés internes, l'une est une méthode de fonctionnement des objets et l'autre est une méthode de stockage de données. Par exemple :

  • [[Prototype]] — Le prototype de l'objet, qui peut être nul ou l'objet

  • [[Extensible] ] — Indique s'il est autorisé d'ajouter dynamiquement de nouvelles propriétés à l'objet

  • [[PrivateFieldValues]] — utilisé pour gérer les champs de classe privés

2. Objet descripteur de propriété


L'attribut data contient l'emplacement d'une valeur de données à partir de laquelle la valeur peut être lue et écrite. En d'autres termes, les attributs de données sont accessibles via Object.Attributes, c'est-à-dire que quelles que soient les valeurs attribuées par les utilisateurs avec lesquels nous interagissons habituellement, ils renverront ce qu'ils veulent et ne feront rien de plus.

L'attribut data possède 4 caractéristiques qui décrivent son comportement (afin de représenter la valeur interne, l'attribut est placé entre deux crochets), ce qu'on appelle un objet descripteur. Le

descripteur de valeur est la valeur de données de l'attribut. Par exemple, nous avons l'objet suivant :

let foo = {
  a: 1}
Copier après la connexion

Alors, le descripteur d'attribut de valeur de a est 1.

inscriptible indique si la valeur de l'attribut peut être modifiée. La valeur par défaut est true, ce qui signifie que la propriété est accessible en écriture. Cependant, nous pouvons le rendre illisible de plusieurs manières.

configurable signifie que les propriétés d'un objet peuvent être supprimées ou que ses descripteurs de propriétés peuvent être modifiés. La valeur par défaut est true, ce qui signifie qu'elle est configurable.

enumerable signifie qu'il peut être parcouru par for...in en boucle. La valeur par défaut est true, ce qui signifie que la propriété peut être renvoyée via une boucle for-in

avant d'ajouter la clé de propriété au tableau renvoyé. La méthode Object.keys vérifie également le descripteur énumérable. Cependant, la méthode Reflect.ownKeys ne vérifie pas ce descripteur de propriété et renvoie à la place toutes ses propres clés de propriété.

Le descripteur de prototype a d'autres méthodes, get et set sont utilisés respectivement pour obtenir et définir les valeurs.

Lors de la création d'un nouvel objet, nous pouvons utiliser la méthode Object.defineProperty pour définir le descripteur comme suit :

let foo = {
  a: 1}Object.defineProperty(foo, 'b', {
  value: 2,
  writable: true,
  enumerable: true,
  configurable: true,});
Copier après la connexion

De cette façon, la nouvelle valeur de foo est {a : 1, b :2} .
Nous pouvons également modifier le descripteur d'une propriété existante en utilisant finishProperty. Par exemple :

let foo = {
  a: 1}Object.defineProperty(foo, 'a', {
  value: 2,
  writable: false,
  enumerable: true,
  configurable: true,});
Copier après la connexion

Ainsi, lorsque nous essayons d'attribuer une valeur à foo.a comme :

foo.a = 2;
Copier après la connexion
Copier après la connexion

Si le mode strict est désactivé, le navigateur l'ignorera, sinon il générera une erreur car we will writable est défini sur false, indiquant que la propriété n'est pas accessible en écriture.
Nous pouvons également utiliser DefineProperty pour convertir la propriété en getter, comme indiqué ci-dessous :

'use strict'let foo = {  a: 1}Object.defineProperty(foo, 'b', {  get() {    return 1;
  }
})
Copier après la connexion

Quand nous écrivons comme ceci :

foo.b = 2;
Copier après la connexion

Parce que l'attribut b est un attribut getter, lorsque en utilisant le mode strict, nous obtenons une erreur : les propriétés Getter ne peuvent pas être réaffectées.

3. Les propriétés héritées en lecture seule ne peuvent pas être attribuées.


Les propriétés héritées en lecture seule ne peuvent pas être attribuées. Cela a du sens, puisque nous l'avons configuré ainsi, il est hérité, il doit donc être propagé à l'objet qui hérite de la propriété.

Nous pouvons utiliser Object.create pour créer un objet qui hérite des propriétés de l'objet prototype comme suit :

const proto = Object.defineProperties({}, {
  a: {
    value: 1,
    writable: false
  }})const foo = Object.create(proto)
Copier après la connexion

Dans le code ci-dessus, nous définissons le descripteur inscriptible de proto.a sur false, nous ne pouvons donc pas lui attribuer une autre valeur.

Si on écrit :

foo.a = 2;
Copier après la connexion
Copier après la connexion

En mode strict nous aurons un message d'erreur.

Résumé


Nous pouvons faire beaucoup de choses avec des objets JavaScript que nous ne connaissons peut-être pas.

Tout d'abord, certains objets JavaScript (tels que l'objet navigateur intégré) ont des propriétés internes, qui sont entourées de doubles crochets. Ils ont un état interne qui ne peut pas être ajouté dynamiquement par la création d'un objet.

Les propriétés des objets JavaScript ont également des descripteurs de propriétés, qui nous permettent de contrôler leurs valeurs et si elles peuvent être définies, ou si leurs descripteurs de propriétés peuvent être modifiés, etc.

On peut changer le descripteur de propriété d'une propriété en utilisant finishProperty, il est également utilisé pour ajouter une nouvelle propriété et son descripteur de propriété.

Enfin, la propriété en lecture seule héritée reste en lecture seule, ce qui est logique puisqu'elle est héritée de l'objet prototype parent.

Tutoriel recommandé : "Tutoriel Javascript"

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!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal