aboutsummaryrefslogtreecommitdiff
path: root/files/fr/web/javascript/reference/global_objects/object/create
diff options
context:
space:
mode:
Diffstat (limited to 'files/fr/web/javascript/reference/global_objects/object/create')
-rw-r--r--files/fr/web/javascript/reference/global_objects/object/create/index.html215
-rw-r--r--files/fr/web/javascript/reference/global_objects/object/create/index.md195
2 files changed, 195 insertions, 215 deletions
diff --git a/files/fr/web/javascript/reference/global_objects/object/create/index.html b/files/fr/web/javascript/reference/global_objects/object/create/index.html
deleted file mode 100644
index 016638fa7f..0000000000
--- a/files/fr/web/javascript/reference/global_objects/object/create/index.html
+++ /dev/null
@@ -1,215 +0,0 @@
----
-title: Object.create()
-slug: Web/JavaScript/Reference/Global_Objects/Object/create
-tags:
- - ECMAScript 5
- - JavaScript
- - Méthode
- - Object
- - Reference
- - polyfill
-translation_of: Web/JavaScript/Reference/Global_Objects/Object/create
-original_slug: Web/JavaScript/Reference/Objets_globaux/Object/create
----
-<div>{{JSRef}}</div>
-
-<p>La méthode <code><strong>Object.create()</strong></code> crée un nouvel objet avec un prototype donné et des propriétés données.</p>
-
-<div>{{EmbedInteractiveExample("pages/js/object-create.html")}}</div>
-
-<h2 id="Syntaxe">Syntaxe</h2>
-
-<pre class="syntaxbox">Object.create(<var>proto</var>)
-Object.create(proto, <em>objetP</em><var>ropriétés</var>)</pre>
-
-<h3 id="Paramètres">Paramètres</h3>
-
-<dl>
- <dt><code>proto</code></dt>
- <dd>L'objet qui sera le prototype du nouvel objet créé.</dd>
- <dt><code>objetPropriétés</code></dt>
- <dd>Paramètre optionnel. S'il est fourni et qu'il ne vaut pas {{jsxref("undefined")}}, il sera utilisé comme un objet dont les propriétés propres (celles qui ne sont pas héritées par la chaîne de prototypes) et énumérables définiront des descripteurs pour les propriétés à ajouter au nouvel objet, avec les mêmes noms. Ces propriétés correspondent au deuxième argument de {{jsxref("Object.defineProperties()")}}.</dd>
-</dl>
-
-<h3 id="Valeur_de_retour">Valeur de retour</h3>
-
-<p>Un nouvel objet qui dispose du prototype et des propriétés indiquées.</p>
-
-<h3 id="Exceptions">Exceptions</h3>
-
-<p>Cette méthode lève une exception {{jsxref("TypeError")}} si le paramètre <code>objetPropriétés</code> vaut {{jsxref("null")}} ou s'il ne décrit pas des propriétés d'un objet.</p>
-
-<h2 id="Exemples">Exemples</h2>
-
-<h3 id="L'héritage_classique_avec_Object.create()">L'héritage classique avec <code>Object.create()</code></h3>
-
-<p>Dans l'exemple ci-dessous, on utilise <code>Object.create()</code> afin de réaliser un héritage de classe. Ce modèle ne supporte que l'héritage unique (un objet hérite directement uniquement d'un autre objet) car JavaScript ne gère pas l'héritage multiple.</p>
-
-<pre class="brush: js">// Forme, la classe parente
-function Forme() {
- this.x = 0;
- this.y = 0;
-}
-
-// Méthode de la classe parente
-Forme.prototype.déplacer = function(x, y) {
- this.x += x;
- this.y += y;
- console.info('Forme déplacée.');
-};
-
-// Rectangle - classe fille
-function Rectangle() {
- // on appelle le constructeur parent
- Forme.call(this);
-}
-
-// La classe fille surcharge la classe parente
-Rectangle.prototype = Object.create(Forme.prototype);
-
-// Si on ne définit pas le constructeur avec Rectangle, il récupèrera le constructeur
-// Forme (le parent).
-Rectangle.prototype.constructor = Rectangle;
-
-var rect = new Rectangle();
-
-console.log('instance de Rectangle ? ', (rect instanceof Rectangle));
-// true
-console.log('une instance de Forme ? ', (rect instanceof Forme));
- // true
-rect.déplacer(1, 1);
-// Affiche 'Forme déplacée.'
-</pre>
-
-<p>Si on souhaite hériter de plusieurs objets, on peut utiliser des <em>mixins</em>.</p>
-
-<pre class="brush: js">function MaClasse() {
- ClasseParente1.call(this);
- ClasseParente2.call(this);
-}
-
-MaClasse.prototype = Object.create(ClasseParente1.prototype); // héritage d'une classe
-Object.assign(MaClasse.prototype, ClasseParente2.prototype); // mixin pour une autre
-MaClasse.prototype.constructor = MaClasse; // On réaffecte le constructeur
-
-MaClasse.prototype.maMéthode = function() {
- // faire quelque chose
-};
-</pre>
-
-<p>Ici, la méthode {{jsxref("Object.assign()")}} copie les propriétés du prototype de la classe parente (<code>ClassParente2</code>) sur le prototype de la classe fille (<code>MaClasse</code>), les rendant disponibles pour toutes les instances de <code>MaClasse</code>. <code>Object.assign()</code> a été introduit avec ES2015 et <a href="/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/assign#Prothèse_d'émulation_(polyfill)">une prothèse d'émulation (polyfill)</a> est disponible. Si le support des navigateurs plus anciens est nécessaire, les méthodes <code><a href="https://api.jquery.com/jQuery.extend/">jQuery.extend()</a></code> ou <code><a href="https://lodash.com/docs/#assign">_.assign()</a></code> (Lodash) peuvent être utilisées.</p>
-
-<h3 id="Utiliser_l'argument_objetPropriétés_avec_Object.create()">Utiliser l'argument <code>objetPropriétés</code> avec <code>Object.create()</code></h3>
-
-<pre class="brush: js">var o;
-
-// on crée un objet avec null
-// comme prototype
-o = Object.create(null);
-
-
-o = {};
-// est équivalent à :
-o = Object.create(Object.prototype);
-
-
-// Exemple où on crée un objet avec quelques propriétés
-// (On voit ici que le second paramètres fait correspondre les clés
-// avec des descripteurs de propriétés.)
-o = Object.create(Object.prototype, {
- // toto est une propriété de donnée
- toto: { writable: true, configurable: true, value: 'hello' },
- // truc est une propriété d'accesseur/mutateur
- truc: {
- configurable: false,
- get: function() { return 10; },
- set: function(value) { console.log('Définir `o.truc` à', value); }
-/* avec les accesseurs ES2015 on aura :
- get() { return 10; },
- set(value) { console.log('Définir `o.truc` à', value); } */
- }
-});
-
-
-function Constructeur() {}
-o = new Constructeur();
-// est équivalent à :
-o = Object.create(Constructeur.prototype);
-// Bien entendu, si la fonction Constructeur
-// possède des instructions pour l'initialisation,
-// Object.create() ne pourra pas le reproduire
-
-
-// on crée un nouvel objet dont le prototype est
-// un nouvel objet vide et on y ajoute une propriété
-// 'p' qui vaut 42
-o = Object.create({}, { p: { value: 42 } });
-
-// par défaut, les propriétés ne sont PAS
-// écrivables, énumérables ou configurables
-o.p = 24;
-o.p;
-// 42
-
-o.q = 12;
-for (var prop in o) {
- console.log(prop);
-}
-// 'q'
-
-delete o.p;
-// false
-
-// Pour définir une propriété selon ES3
-o2 = Object.create({}, {
- p: {
- value: 42,
- writable: true,
- enumerable: true,
- configurable: true
- }
-});
-
-// Équivalent à
-// o2 = Object.create({p: 42});
-</pre>
-
-<h2 id="Spécifications">Spécifications</h2>
-
-<table class="standard-table">
- <tbody>
- <tr>
- <th scope="col">Spécification</th>
- <th scope="col">État</th>
- <th scope="col">Commentaires</th>
- </tr>
- <tr>
- <td>{{SpecName('ES5.1', '#sec-15.2.3.5', 'Object.create')}}</td>
- <td>{{Spec2('ES5.1')}}</td>
- <td>Définition initiale. Implémentée avec JavaScript 1.8.5.</td>
- </tr>
- <tr>
- <td>{{SpecName('ES2015', '#sec-object.create', 'Object.create')}}</td>
- <td>{{Spec2('ES2015')}}</td>
- <td></td>
- </tr>
- <tr>
- <td>{{SpecName('ESDraft', '#sec-object.create', 'Object.create')}}</td>
- <td>{{Spec2('ESDraft')}}</td>
- <td></td>
- </tr>
- </tbody>
-</table>
-
-<h2 id="Compatibilité_des_navigateurs">Compatibilité des navigateurs</h2>
-
-<p>{{Compat("javascript.builtins.Object.create")}}</p>
-
-<h2 id="Voir_aussi">Voir aussi</h2>
-
-<ul>
- <li>{{jsxref("Object.defineProperty()")}}</li>
- <li>{{jsxref("Object.defineProperties()")}}</li>
- <li>{{jsxref("Object.prototype.isPrototypeOf()")}}</li>
- <li>Le billet de John Resig sur <code><a href="https://ejohn.org/blog/objectgetprototypeof/">getPrototypeOf()</a></code> (en anglais)</li>
-</ul> \ No newline at end of file
diff --git a/files/fr/web/javascript/reference/global_objects/object/create/index.md b/files/fr/web/javascript/reference/global_objects/object/create/index.md
new file mode 100644
index 0000000000..46985e3ff2
--- /dev/null
+++ b/files/fr/web/javascript/reference/global_objects/object/create/index.md
@@ -0,0 +1,195 @@
+---
+title: Object.create()
+slug: Web/JavaScript/Reference/Global_Objects/Object/create
+tags:
+ - ECMAScript 5
+ - JavaScript
+ - Méthode
+ - Object
+ - Reference
+ - polyfill
+translation_of: Web/JavaScript/Reference/Global_Objects/Object/create
+original_slug: Web/JavaScript/Reference/Objets_globaux/Object/create
+---
+{{JSRef}}
+
+La méthode **`Object.create()`** crée un nouvel objet avec un prototype donné et des propriétés données.
+
+{{EmbedInteractiveExample("pages/js/object-create.html")}}
+
+## Syntaxe
+
+ Object.create(proto)
+ Object.create(proto, objetPropriétés)
+
+### Paramètres
+
+- `proto`
+ - : L'objet qui sera le prototype du nouvel objet créé.
+- `objetPropriétés`
+ - : Paramètre optionnel. S'il est fourni et qu'il ne vaut pas {{jsxref("undefined")}}, il sera utilisé comme un objet dont les propriétés propres (celles qui ne sont pas héritées par la chaîne de prototypes) et énumérables définiront des descripteurs pour les propriétés à ajouter au nouvel objet, avec les mêmes noms. Ces propriétés correspondent au deuxième argument de {{jsxref("Object.defineProperties()")}}.
+
+### Valeur de retour
+
+Un nouvel objet qui dispose du prototype et des propriétés indiquées.
+
+### Exceptions
+
+Cette méthode lève une exception {{jsxref("TypeError")}} si le paramètre `objetPropriétés` vaut {{jsxref("null")}} ou s'il ne décrit pas des propriétés d'un objet.
+
+## Exemples
+
+### L'héritage classique avec `Object.create()`
+
+Dans l'exemple ci-dessous, on utilise `Object.create()` afin de réaliser un héritage de classe. Ce modèle ne supporte que l'héritage unique (un objet hérite directement uniquement d'un autre objet) car JavaScript ne gère pas l'héritage multiple.
+
+```js
+// Forme, la classe parente
+function Forme() {
+ this.x = 0;
+ this.y = 0;
+}
+
+// Méthode de la classe parente
+Forme.prototype.déplacer = function(x, y) {
+ this.x += x;
+ this.y += y;
+ console.info('Forme déplacée.');
+};
+
+// Rectangle - classe fille
+function Rectangle() {
+ // on appelle le constructeur parent
+ Forme.call(this);
+}
+
+// La classe fille surcharge la classe parente
+Rectangle.prototype = Object.create(Forme.prototype);
+
+// Si on ne définit pas le constructeur avec Rectangle, il récupèrera le constructeur
+// Forme (le parent).
+Rectangle.prototype.constructor = Rectangle;
+
+var rect = new Rectangle();
+
+console.log('instance de Rectangle ? ', (rect instanceof Rectangle));
+// true
+console.log('une instance de Forme ? ', (rect instanceof Forme));
+ // true
+rect.déplacer(1, 1);
+// Affiche 'Forme déplacée.'
+```
+
+Si on souhaite hériter de plusieurs objets, on peut utiliser des _mixins_.
+
+```js
+function MaClasse() {
+ ClasseParente1.call(this);
+ ClasseParente2.call(this);
+}
+
+MaClasse.prototype = Object.create(ClasseParente1.prototype); // héritage d'une classe
+Object.assign(MaClasse.prototype, ClasseParente2.prototype); // mixin pour une autre
+MaClasse.prototype.constructor = MaClasse; // On réaffecte le constructeur
+
+MaClasse.prototype.maMéthode = function() {
+ // faire quelque chose
+};
+```
+
+Ici, la méthode {{jsxref("Object.assign()")}} copie les propriétés du prototype de la classe parente (`ClassParente2`) sur le prototype de la classe fille (`MaClasse`), les rendant disponibles pour toutes les instances de `MaClasse`. `Object.assign()` a été introduit avec ES2015 et [une prothèse d'émulation (polyfill)](</fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/assign#Prothèse_d'émulation_(polyfill)>) est disponible. Si le support des navigateurs plus anciens est nécessaire, les méthodes [`jQuery.extend()`](https://api.jquery.com/jQuery.extend/) ou [`_.assign()`](https://lodash.com/docs/#assign) (Lodash) peuvent être utilisées.
+
+### Utiliser l'argument `objetPropriétés` avec `Object.create()`
+
+```js
+var o;
+
+// on crée un objet avec null
+// comme prototype
+o = Object.create(null);
+
+
+o = {};
+// est équivalent à :
+o = Object.create(Object.prototype);
+
+
+// Exemple où on crée un objet avec quelques propriétés
+// (On voit ici que le second paramètres fait correspondre les clés
+// avec des descripteurs de propriétés.)
+o = Object.create(Object.prototype, {
+ // toto est une propriété de donnée
+ toto: { writable: true, configurable: true, value: 'hello' },
+ // truc est une propriété d'accesseur/mutateur
+ truc: {
+ configurable: false,
+ get: function() { return 10; },
+ set: function(value) { console.log('Définir `o.truc` à', value); }
+/* avec les accesseurs ES2015 on aura :
+ get() { return 10; },
+ set(value) { console.log('Définir `o.truc` à', value); } */
+ }
+});
+
+
+function Constructeur() {}
+o = new Constructeur();
+// est équivalent à :
+o = Object.create(Constructeur.prototype);
+// Bien entendu, si la fonction Constructeur
+// possède des instructions pour l'initialisation,
+// Object.create() ne pourra pas le reproduire
+
+
+// on crée un nouvel objet dont le prototype est
+// un nouvel objet vide et on y ajoute une propriété
+// 'p' qui vaut 42
+o = Object.create({}, { p: { value: 42 } });
+
+// par défaut, les propriétés ne sont PAS
+// écrivables, énumérables ou configurables
+o.p = 24;
+o.p;
+// 42
+
+o.q = 12;
+for (var prop in o) {
+ console.log(prop);
+}
+// 'q'
+
+delete o.p;
+// false
+
+// Pour définir une propriété selon ES3
+o2 = Object.create({}, {
+ p: {
+ value: 42,
+ writable: true,
+ enumerable: true,
+ configurable: true
+ }
+});
+
+// Équivalent à
+// o2 = Object.create({p: 42});
+```
+
+## Spécifications
+
+| Spécification | État | Commentaires |
+| ------------------------------------------------------------------------------------ | ---------------------------- | ------------------------------------------------------- |
+| {{SpecName('ES5.1', '#sec-15.2.3.5', 'Object.create')}} | {{Spec2('ES5.1')}} | Définition initiale. Implémentée avec JavaScript 1.8.5. |
+| {{SpecName('ES2015', '#sec-object.create', 'Object.create')}} | {{Spec2('ES2015')}} | |
+| {{SpecName('ESDraft', '#sec-object.create', 'Object.create')}} | {{Spec2('ESDraft')}} | |
+
+## Compatibilité des navigateurs
+
+{{Compat("javascript.builtins.Object.create")}}
+
+## Voir aussi
+
+- {{jsxref("Object.defineProperty()")}}
+- {{jsxref("Object.defineProperties()")}}
+- {{jsxref("Object.prototype.isPrototypeOf()")}}
+- Le billet de John Resig sur [`getPrototypeOf()`](https://ejohn.org/blog/objectgetprototypeof/) (en anglais)