diff options
| author | julieng <julien.gattelier@gmail.com> | 2021-08-03 08:03:09 +0200 |
|---|---|---|
| committer | SphinxKnight <SphinxKnight@users.noreply.github.com> | 2021-09-03 08:08:25 +0200 |
| commit | 844f5103992238c0c23203286dad16a466e89c97 (patch) | |
| tree | d537708951bb2b61be8192ffacc05a0ce6804f89 /files/fr/web/javascript/reference/global_objects/object/create/index.html | |
| parent | a70fd5b73ecb10bec3906640023e2a1a46e118a2 (diff) | |
| download | translated-content-844f5103992238c0c23203286dad16a466e89c97.tar.gz translated-content-844f5103992238c0c23203286dad16a466e89c97.tar.bz2 translated-content-844f5103992238c0c23203286dad16a466e89c97.zip | |
move *.html to *.md
Diffstat (limited to 'files/fr/web/javascript/reference/global_objects/object/create/index.html')
| -rw-r--r-- | files/fr/web/javascript/reference/global_objects/object/create/index.html | 215 |
1 files changed, 0 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 |
