diff options
author | julieng <julien.gattelier@gmail.com> | 2021-08-03 08:03:23 +0200 |
---|---|---|
committer | SphinxKnight <SphinxKnight@users.noreply.github.com> | 2021-09-03 08:08:25 +0200 |
commit | bf8e099b9c8b3c60d60b3712b4fc97b052c39887 (patch) | |
tree | c101746d082c9581c94f5937519c7d0e2f4af8cb /files/fr/web/javascript/reference/classes/private_class_fields | |
parent | 844f5103992238c0c23203286dad16a466e89c97 (diff) | |
download | translated-content-bf8e099b9c8b3c60d60b3712b4fc97b052c39887.tar.gz translated-content-bf8e099b9c8b3c60d60b3712b4fc97b052c39887.tar.bz2 translated-content-bf8e099b9c8b3c60d60b3712b4fc97b052c39887.zip |
convert content to md
Diffstat (limited to 'files/fr/web/javascript/reference/classes/private_class_fields')
-rw-r--r-- | files/fr/web/javascript/reference/classes/private_class_fields/index.md | 133 |
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 world"</pre> +// expected output: "hello world" +``` -<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 world✨" -</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) |