aboutsummaryrefslogtreecommitdiff
path: root/files/fr/web/javascript/reference/classes/private_class_fields/index.md
diff options
context:
space:
mode:
Diffstat (limited to 'files/fr/web/javascript/reference/classes/private_class_fields/index.md')
-rw-r--r--files/fr/web/javascript/reference/classes/private_class_fields/index.md133
1 files changed, 63 insertions, 70 deletions
diff --git a/files/fr/web/javascript/reference/classes/private_class_fields/index.md b/files/fr/web/javascript/reference/classes/private_class_fields/index.md
index 9d1187b01d..45ad084074 100644
--- a/files/fr/web/javascript/reference/classes/private_class_fields/index.md
+++ b/files/fr/web/javascript/reference/classes/private_class_fields/index.md
@@ -7,36 +7,34 @@ tags:
- JavaScript
translation_of: Web/JavaScript/Reference/Classes/Private_class_fields
---
-<div>{{JsSidebar("Classes")}}</div>
+{{JsSidebar("Classes")}}Les propriétés de classe sont publiques par défaut et peuvent être lues et modifiées à l'extérieur de la classe. Cependant, [une proposition expérimentale](https://github.com/tc39/proposal-class-fields), permettant de définir des variables privées dans une classe avec le préfixe `#`, est disponible.
-<div>Les propriétés de classe sont publiques par défaut et peuvent être lues et modifiées à l'extérieur de la classe. Cependant, <a href="https://github.com/tc39/proposal-class-fields">une proposition expérimentale</a>, permettant de définir des variables privées dans une classe avec le préfixe <code>#</code>, est disponible.</div>
+## Syntaxe
-<h2 id="Syntaxe">Syntaxe</h2>
+ class ClassWithPrivateField {
+ #privateField
+ }
-<pre class="syntaxbox notranslate">class ClassWithPrivateField {
- #privateField
-}
+ class ClassWithPrivateMethod {
+ #privateMethod() {
+ return 'hello world'
+ }
+ }
-class ClassWithPrivateMethod {
- #privateMethod() {
- return 'hello world'
- }
-}
-
-class ClassWithPrivateStaticField {
- static #PRIVATE_STATIC_FIELD
-}
-</pre>
+ class ClassWithPrivateStaticField {
+ static #PRIVATE_STATIC_FIELD
+ }
-<h2 id="Exemples">Exemples</h2>
+## Exemples
-<h3 id="Champs_privés_statiques">Champs privés statiques</h3>
+### Champs privés statiques
-<p>Les champs privés sont accessibles depuis le constructeur et depuis l'intérieur de la déclaration de la classe elle-même.</p>
+Les champs privés sont accessibles depuis le constructeur et depuis l'intérieur de la déclaration de la classe elle-même.
-<p>La limitation des variables statiques ne pouvant être appelées que par des méthodes statiques tient toujours.</p>
+La limitation des variables statiques ne pouvant être appelées que par des méthodes statiques tient toujours.
-<pre class="brush: js notranslate">class ClassWithPrivateStaticField {
+```js
+class ClassWithPrivateStaticField {
  static #PRIVATE_STATIC_FIELD
  static publicStaticMethod() {
@@ -45,15 +43,17 @@ class ClassWithPrivateStaticField {
  }
}
-console.assert(ClassWithPrivateStaticField.publicStaticMethod() === 42)</pre>
+console.assert(ClassWithPrivateStaticField.publicStaticMethod() === 42)
+```
-<p>Les champs statiques privés sont ajoutés au constructeur de la classe au moment de l'évaluation de classe..</p>
+Les champs statiques privés sont ajoutés au constructeur de la classe au moment de l'évaluation de classe..
-<p>Il y a une restriction de provenance sur les champs statiques privés. Seule la classe qui a défini un champ statique privé peut y accéder.</p>
+Il y a une restriction de provenance sur les champs statiques privés. Seule la classe qui a défini un champ statique privé peut y accéder.
-<p>Ceci peut conduire à un comportement inattendu lors de l'utilisation de <strong><code>this</code></strong>.</p>
+Ceci peut conduire à un comportement inattendu lors de l'utilisation de **`this`**.
-<pre class="brush: js notranslate">class BaseClassWithPrivateStaticField {
+```js
+class BaseClassWithPrivateStaticField {
  static #PRIVATE_STATIC_FIELD
  static basePublicStaticMethod() {
@@ -71,15 +71,16 @@ try {
} catch(e) { error = e}
console.assert(error instanceof TypeError)
-</pre>
+```
-<h3 id="Champs_dinstance_privés">Champs d'instance privés</h3>
+### Champs d'instance privés
-<p>Les champs d'instance privés sont déclarés avec des <strong>noms</strong> à <strong># </strong>(prononcés "<em>noms à hash</em>", "<em>hash names</em>" en anglais), qui sont des identifieurs préfixés par <code>#</code>. Le <code>#</code> fait partie du nom lui-même. Il est utilisé tant pour la déclaration que pour l'accès.</p>
+Les champs d'instance privés sont déclarés avec des **noms** à **#** (prononcés "_noms à hash_", "_hash names_" en anglais), qui sont des identifieurs préfixés par `#`. Le `#` fait partie du nom lui-même. Il est utilisé tant pour la déclaration que pour l'accès.
-<p>L'encapsulation est forcée par le langage. C'est une erreur de syntaxe que de faire référence aux noms à <code>#</code> en dehors de leur portée.</p>
+L'encapsulation est forcée par le langage. C'est une erreur de syntaxe que de faire référence aux noms à `#` en dehors de leur portée.
-<pre class="brush: js notranslate">class ClassWithPrivateField {
+```js
+class ClassWithPrivateField {
  #privateField
  constructor() {
@@ -90,17 +91,18 @@ console.assert(error instanceof TypeError)
const instance = new ClassWithPrivateField()
instance.#privateField === 42 // Erreur de syntaxe
-</pre>
+```
-<h3 id="Méthodes_Privées">Méthodes Privées</h3>
+### Méthodes Privées
-<h4 id="Méthodes_statiques_privées">Méthodes statiques privées</h4>
+#### Méthodes statiques privées
-<p>Comme leur équivalents publics, les méthodes statiques privées sont appelées dans la classe elle-même, pas dans les instances de la classe. Comme les champs statiques privés, elles ne sont accessibles que depuis l'intérieur de la déclaration de la classe.</p>
+Comme leur équivalents publics, les méthodes statiques privées sont appelées dans la classe elle-même, pas dans les instances de la classe. Comme les champs statiques privés, elles ne sont accessibles que depuis l'intérieur de la déclaration de la classe.
-<p>Les méthodes statiques privées peuvent être des fonctions génératrices, asynchrones et génératrices asynchrones.</p>
+Les méthodes statiques privées peuvent être des fonctions génératrices, asynchrones et génératrices asynchrones.
-<pre class="brush: js notranslate">class ClassWithPrivateStaticMethod {
+```js
+class ClassWithPrivateStaticMethod {
    static #privateStaticMethod() {
        return 42
    }
@@ -116,11 +118,12 @@ instance.#privateField === 42 // Erreur de syntaxe
console.assert(ClassWithPrivateStaticMethod.publicStaticMethod1() === 42);
console.assert(ClassWithPrivateStaticMethod.publicStaticMethod2() === 42);
-</pre>
+```
-<p>Cela peut conduire à un comportement inattendu lors de l'utilisation de <strong><code>this</code></strong>. Dans l'exemple suivant, <code>this</code> fait référence à la classe <code>Derived</code> (pas à la classe <code>Base</code>) lorsqu'on essaie d'appeler <code>Derived.publicStaticMethod2()</code>, et fait ainsi apparaître la même "restriction de provenance" que mentionné ci-dessus :</p>
+Cela peut conduire à un comportement inattendu lors de l'utilisation de **`this`**. Dans l'exemple suivant, `this` fait référence à la classe `Derived` (pas à la classe `Base`) lorsqu'on essaie d'appeler `Derived.publicStaticMethod2()`, et fait ainsi apparaître la même "restriction de provenance" que mentionné ci-dessus :
-<pre class="brush: js notranslate">class Base {
+```js
+class Base {
    static #privateStaticMethod() {
        return 42;
    }
@@ -136,13 +139,14 @@ class Derived extends Base {}
console.log(Derived.publicStaticMethod1()); // 42
console.log(Derived.publicStaticMethod2()); // TypeError
-</pre>
+```
-<h4 id="Méthodes_dinstance_privées">Méthodes d'instance privées</h4>
+#### Méthodes d'instance privées
-<p>Les méthodes d'instance privées sont des méthodes disponibles dans les instances de classe privées, dont l'accès est restreint de la même manière que les champs d'instance privés.</p>
+Les méthodes d'instance privées sont des méthodes disponibles dans les instances de classe privées, dont l'accès est restreint de la même manière que les champs d'instance privés.
-<pre class="brush: js notranslate">class ClassWithPrivateMethod {
+```js
+class ClassWithPrivateMethod {
  #privateMethod() {
    return 'hello world'
  }
@@ -154,11 +158,13 @@ console.log(Derived.publicStaticMethod2()); // TypeError
const instance = new ClassWithPrivateMethod()
console.log(instance.getPrivateMessage())
-// expected output: "hello worl​d"</pre>
+// expected output: "hello worl​d"
+```
-<p>Les méthodes d'instance privées peuvent être des fonctions génératrices, asynchones ou génératrices asynchrones. Des accesseurs (getters) et des mutateurs (setters) privés sont aussi posibles :</p>
+Les méthodes d'instance privées peuvent être des fonctions génératrices, asynchones ou génératrices asynchrones. Des accesseurs (getters) et des mutateurs (setters) privés sont aussi posibles :
-<pre class="brush: js notranslate">class ClassWithPrivateAccessor {
+```js
+class ClassWithPrivateAccessor {
  #message
  get #decoratedMessage() {
@@ -176,32 +182,19 @@ console.log(instance.getPrivateMessage())
new ClassWithPrivateAccessor();
// expected output: "✨hello worl​d✨"
-</pre>
-
-<h2 id="Spécifications">Spécifications</h2>
-
-<table class="standard-table">
- <thead>
- <tr>
- <th scope="col">Spécification</th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td>{{SpecName('Public and private instance fields', '#prod-FieldDefinition', 'FieldDefinition')}}</td>
- </tr>
- </tbody>
-</table>
+```
-<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2>
+## Spécifications
+| Spécification |
+| ---------------------------------------------------------------------------------------------------------------------------- |
+| {{SpecName('Public and private instance fields', '#prod-FieldDefinition', 'FieldDefinition')}} |
+## Compatibilité des navigateurs
-<p>{{Compat("javascript.classes.private_class_fields")}}</p>
+{{Compat("javascript.classes.private_class_fields")}}
-<h2 id="Voir_aussi">Voir aussi</h2>
+## Voir aussi
-<ul>
- <li><a href="/fr/docs/Web/JavaScript/Reference/Classes/Class_fields">Champs de classe publiques</a></li>
- <li><a href="https://rfrn.org/~shu/2018/05/02/the-semantics-of-all-js-class-elements.html">The Semantics of All JS Class Elements</a></li>
-</ul>
+- [Champs de classe publiques](/fr/docs/Web/JavaScript/Reference/Classes/Class_fields)
+- [The Semantics of All JS Class Elements](https://rfrn.org/~shu/2018/05/02/the-semantics-of-all-js-class-elements.html)