From 844f5103992238c0c23203286dad16a466e89c97 Mon Sep 17 00:00:00 2001 From: julieng Date: Tue, 3 Aug 2021 08:03:09 +0200 Subject: move *.html to *.md --- .../global_objects/reflect/construct/index.html | 160 --------------------- .../global_objects/reflect/construct/index.md | 160 +++++++++++++++++++++ 2 files changed, 160 insertions(+), 160 deletions(-) delete mode 100644 files/fr/web/javascript/reference/global_objects/reflect/construct/index.html create mode 100644 files/fr/web/javascript/reference/global_objects/reflect/construct/index.md (limited to 'files/fr/web/javascript/reference/global_objects/reflect/construct') diff --git a/files/fr/web/javascript/reference/global_objects/reflect/construct/index.html b/files/fr/web/javascript/reference/global_objects/reflect/construct/index.html deleted file mode 100644 index 3a53b1c6d8..0000000000 --- a/files/fr/web/javascript/reference/global_objects/reflect/construct/index.html +++ /dev/null @@ -1,160 +0,0 @@ ---- -title: Reflect.construct() -slug: Web/JavaScript/Reference/Global_Objects/Reflect/construct -tags: - - ECMAScript 2015 - - JavaScript - - Méthode - - Reference - - Reflect -translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/construct -original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/construct ---- -
{{JSRef}}
- -

La méthode statique Reflect.construct() agit comme l'opérateur new sous la forme d'une fonction. Elle est équivalente à new cible(...args) et permet d'indiquer un prototype différent.

- -
{{EmbedInteractiveExample("pages/js/reflect-construct.html")}}
- -

Syntaxe

- -
Reflect.construct(cible, listeArguments[, newCible])
-
- -

Paramètres

- -
-
cible
-
La fonction cible à appeler.
-
listeArguments
-
Un objet semblable à un tableau définissant les arguments à passer à cible lors de l'appel. Utiliser {{jsxref("null")}} ou {{jsxref("undefined")}} si aucun argument ne doit être fourni à la fonction.
-
newCible {{optional_inline}}
-
Le constructeur dont le prototype devrait être utilisé. Voir également l'opérateur new.target. Si newCible n'est pas présent, c'est cible qui sera utilisé.
-
- -

Valeur de retour

- -

Un nouvelle instance de la cible indiquée, créée en l'appelant comme un constructeur (ou en appelant newCible si elle est fournie) avec les arguments fournis.

- -

Exceptions levées

- -

Une exception {{jsxref("TypeError")}} si cible ou newCible ne sont pas des constructeurs.

- -

Description

- -

Reflect.construct() permet d'appeler un constructeur avec un nombre d'arguments variable (ce qui peut également être fait avec l'opérateur de décomposition et l'opérateur new).

- -
var obj = new Toto(...args);
-var obj = Reflect.construct(Toto, args);
- -

Exemples

- -

Utiliser Reflect.construct()

- -
var d = Reflect.construct(Date, [1776, 6, 4]);
-d instanceof Date; // true
-d.getFullYear(); // 1776
-
- -

Utiliser le paramètre newCible

- -

Pour plus d'informations sur la création de sous-classes, voir les classes et l'opérateur new.target.

- -
function unConstructeur() {}
-var résultat = Reflect.construct(Array, [], unConstructeur);
-
-Reflect.getPrototypeOf(résultat); // unConstructeur.prototype
-Array.isArray(résultat); // true
-
- -

Une comparaison entre Reflect.construct() et Object.create()

- -

Avant l'apparition de Reflect, on pouvait construire des objets avec une combinaison donnée de consttructeur et de prototype grâce à {{jsxref("Object.create()")}}.

- -
function MaClasseA() {
-  this.name = 'A';
-}
-
-function MaClasseB() {
-  this.name = 'B';
-}
-
-// Avec cette instruction :
-var obj1 = Reflect.construct(MaClasseA, args, MaClasseB);
-
-// on aura le même résultat qu'avec
-var obj2 = Object.create(MaClasseB.prototype);
-MaClasseA.apply(obj2, args);
-
-console.log(obj1.name); // 'A'
-console.log(obj2.name); // 'A'
-
-console.log(obj1 instanceof MaClasseA); // false
-console.log(obj2 instanceof MaClasseA); // false
-
-console.log(obj1 instanceof MaClasseB); // true
-console.log(obj2 instanceof MaClasseB); // true
-
- -

Toutefois, si les résultats sont identiques, il y a une différence notable. Lorsqu'on utilise Object.create() et Function.prototype.apply(), l'opérateur new.target pointe vers undefined dans la fonction utilisée comme constructeur car le mot-clé new n'est pas utilisé à la création de l'objet.

- -

Mais quand on appelle Reflect.construct(), new.target pointe vers la valeur fournie par newCible si ce dernier est fourni ou vers cible sinon.

- -
function MaClasseA() {
-  console.log('MaClasseA');
-  console.log(new.target);
-}
-function MaClasseB() {
-  console.log('MaClasseB');
-  console.log(new.target);
-}
-
-var obj1 = Reflect.construct(MaClasseA, args);
-// Résultat :
-//   MaClasseA
-//   function MaClasseA { ... }
-
-var obj2 = Reflect.construct(MaClasseA, args, MaClasseB);
-// Résultat :
-//   MaClasseA
-//   function MaClasseB { ... }
-
-var obj3 = Object.create(MaClasseB.prototype);
-MaClasseA.apply(obj3, args);
-// Résultat :
-//     MaClasseA
-//     undefined
- -

Spécifications

- - - - - - - - - - - - - - - - - - - -
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.construct', 'Reflect.construct')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.construct', 'Reflect.construct')}}{{Spec2('ESDraft')}}
- -

Compatibilité des navigateurs

- -

{{Compat("javascript.builtins.Reflect.construct")}}

- -

Voir aussi

- - diff --git a/files/fr/web/javascript/reference/global_objects/reflect/construct/index.md b/files/fr/web/javascript/reference/global_objects/reflect/construct/index.md new file mode 100644 index 0000000000..3a53b1c6d8 --- /dev/null +++ b/files/fr/web/javascript/reference/global_objects/reflect/construct/index.md @@ -0,0 +1,160 @@ +--- +title: Reflect.construct() +slug: Web/JavaScript/Reference/Global_Objects/Reflect/construct +tags: + - ECMAScript 2015 + - JavaScript + - Méthode + - Reference + - Reflect +translation_of: Web/JavaScript/Reference/Global_Objects/Reflect/construct +original_slug: Web/JavaScript/Reference/Objets_globaux/Reflect/construct +--- +
{{JSRef}}
+ +

La méthode statique Reflect.construct() agit comme l'opérateur new sous la forme d'une fonction. Elle est équivalente à new cible(...args) et permet d'indiquer un prototype différent.

+ +
{{EmbedInteractiveExample("pages/js/reflect-construct.html")}}
+ +

Syntaxe

+ +
Reflect.construct(cible, listeArguments[, newCible])
+
+ +

Paramètres

+ +
+
cible
+
La fonction cible à appeler.
+
listeArguments
+
Un objet semblable à un tableau définissant les arguments à passer à cible lors de l'appel. Utiliser {{jsxref("null")}} ou {{jsxref("undefined")}} si aucun argument ne doit être fourni à la fonction.
+
newCible {{optional_inline}}
+
Le constructeur dont le prototype devrait être utilisé. Voir également l'opérateur new.target. Si newCible n'est pas présent, c'est cible qui sera utilisé.
+
+ +

Valeur de retour

+ +

Un nouvelle instance de la cible indiquée, créée en l'appelant comme un constructeur (ou en appelant newCible si elle est fournie) avec les arguments fournis.

+ +

Exceptions levées

+ +

Une exception {{jsxref("TypeError")}} si cible ou newCible ne sont pas des constructeurs.

+ +

Description

+ +

Reflect.construct() permet d'appeler un constructeur avec un nombre d'arguments variable (ce qui peut également être fait avec l'opérateur de décomposition et l'opérateur new).

+ +
var obj = new Toto(...args);
+var obj = Reflect.construct(Toto, args);
+ +

Exemples

+ +

Utiliser Reflect.construct()

+ +
var d = Reflect.construct(Date, [1776, 6, 4]);
+d instanceof Date; // true
+d.getFullYear(); // 1776
+
+ +

Utiliser le paramètre newCible

+ +

Pour plus d'informations sur la création de sous-classes, voir les classes et l'opérateur new.target.

+ +
function unConstructeur() {}
+var résultat = Reflect.construct(Array, [], unConstructeur);
+
+Reflect.getPrototypeOf(résultat); // unConstructeur.prototype
+Array.isArray(résultat); // true
+
+ +

Une comparaison entre Reflect.construct() et Object.create()

+ +

Avant l'apparition de Reflect, on pouvait construire des objets avec une combinaison donnée de consttructeur et de prototype grâce à {{jsxref("Object.create()")}}.

+ +
function MaClasseA() {
+  this.name = 'A';
+}
+
+function MaClasseB() {
+  this.name = 'B';
+}
+
+// Avec cette instruction :
+var obj1 = Reflect.construct(MaClasseA, args, MaClasseB);
+
+// on aura le même résultat qu'avec
+var obj2 = Object.create(MaClasseB.prototype);
+MaClasseA.apply(obj2, args);
+
+console.log(obj1.name); // 'A'
+console.log(obj2.name); // 'A'
+
+console.log(obj1 instanceof MaClasseA); // false
+console.log(obj2 instanceof MaClasseA); // false
+
+console.log(obj1 instanceof MaClasseB); // true
+console.log(obj2 instanceof MaClasseB); // true
+
+ +

Toutefois, si les résultats sont identiques, il y a une différence notable. Lorsqu'on utilise Object.create() et Function.prototype.apply(), l'opérateur new.target pointe vers undefined dans la fonction utilisée comme constructeur car le mot-clé new n'est pas utilisé à la création de l'objet.

+ +

Mais quand on appelle Reflect.construct(), new.target pointe vers la valeur fournie par newCible si ce dernier est fourni ou vers cible sinon.

+ +
function MaClasseA() {
+  console.log('MaClasseA');
+  console.log(new.target);
+}
+function MaClasseB() {
+  console.log('MaClasseB');
+  console.log(new.target);
+}
+
+var obj1 = Reflect.construct(MaClasseA, args);
+// Résultat :
+//   MaClasseA
+//   function MaClasseA { ... }
+
+var obj2 = Reflect.construct(MaClasseA, args, MaClasseB);
+// Résultat :
+//   MaClasseA
+//   function MaClasseB { ... }
+
+var obj3 = Object.create(MaClasseB.prototype);
+MaClasseA.apply(obj3, args);
+// Résultat :
+//     MaClasseA
+//     undefined
+ +

Spécifications

+ + + + + + + + + + + + + + + + + + + +
SpécificationÉtatCommentaires
{{SpecName('ES2015', '#sec-reflect.construct', 'Reflect.construct')}}{{Spec2('ES2015')}}Définition initiale.
{{SpecName('ESDraft', '#sec-reflect.construct', 'Reflect.construct')}}{{Spec2('ESDraft')}}
+ +

Compatibilité des navigateurs

+ +

{{Compat("javascript.builtins.Reflect.construct")}}

+ +

Voir aussi

+ + -- cgit v1.2.3-54-g00ecf