[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype [Back]  [Original]

Function : proprit prototype - JavaScript | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

Function : proprit prototype

La proprit de donnes prototype d'une instance de Function est utilise lorsque la fonction est utilise comme constructeur avec l'oprateur new. Elle deviendra le prototype du nouvel objet.

Note : Tous les objets Function n'ont pas la proprit prototype voir la description.

Dans cet article

Valeur

Un objet.

Attributs de Function : proprit prototype
crivableOui
numrableNon
ConfigurableNon

Note : Les classes sont un type de fonction, donc la plupart de la description ici s'applique galement la proprit prototype des classes. La seule diffrence notable est que la proprit prototype d'une classe n'est pas modifiable.

Description

Lorsque une fonction est appele avec new, la proprit prototype du constructeur devient le prototype de l'objet rsultant.

js
function Ctor() {}
const inst = new Ctor();
console.log(Object.getPrototypeOf(inst) === Ctor.prototype); // true

Vous pouvez lire Hritage et chane de prototypes pour plus d'informations sur les interactions entre la proprit prototype d'une fonction constructeur et le prototype de l'objet rsultant.

Une fonction ayant une proprit prototype n'est pas suffisante pour qu'elle soit ligible en tant que constructeur. Les fonctions gnratrices ont une proprit prototype, mais ne peuvent pas tre appeles avec new :

js
async function* fonctionGeneratriceAsynchrone() {}
function* fonctionGeneratrice() {}

Au lieu de cela, la proprit prototype des fonctions gnratrices est utilise lorsqu'elles sont appeles sans new. La proprit prototype deviendra le prototype de l'objet Generator retourn.

De plus, certaines fonctions peuvent avoir une proprit prototype mais lancer une exception de manire inconditionnelle lorsqu'elles sont appeles avec new. Par exemple, les fonctions Symbol() et BigInt() lancent une exception lorsqu'elles sont appeles avec new, car Symbol.prototype et BigInt.prototype sont uniquement destins fournir des mthodes pour les valeurs primitives, mais les objets wrapper ne doivent pas tre construits directement.

Les fonctions suivantes n'ont pas de prototype et ne sont donc pas ligibles en tant que constructeurs, mme si une proprit prototype est ultrieurement assigne manuellement :

js
const methode = { toto() {} }.toto;
const fonctionFlechee = () => {};
async function fonctionAsynchrone() {}

Les constructeurs valides suivants ont une proprit prototype :

js
class Classe {}
function fn() {}

Une fonction lie n'a pas de proprit prototype, mais peut tre constructible. Lorsqu'elle est construite, la fonction cible est construite la place, et si la fonction cible est constructible, elle retournerait une instance normale.

js
const fonctionLiee = function () {}.bind(null);

La proprit prototype d'une fonction, par dfaut, est un objet simple avec une proprit : constructor, qui est une rfrence la fonction elle-mme. La proprit constructor est modifiable, non numrable et configurable.

Si la proprit prototype d'une fonction est rassigne avec autre chose qu'un Object, lorsque la fonction est appele avec new, le prototype de l'objet retourn sera Object.prototype la place. (En d'autres termes, new ignore la proprit prototype et construit un objet simple.)

js
function Ctor() {}
Ctor.prototype = 3;
console.log(Object.getPrototypeOf(new Ctor()) === Object.prototype); // true

Exemples

Changer le prototype de toutes les instances en modifiant la proprit prototype

js
function Ctor() {}
const p1 = new Ctor();
const p2 = new Ctor();
Ctor.prototype.prop = 1;
console.log(p1.prop); // 1
console.log(p2.prop); // 1

Ajouter une proprit qui n'est pas une mthode la proprit prototype d'une classe

Champs de classe ajoutent des proprits chaque instance. Les mthodes de classe dclarent des proprits fonction sur le prototype. Cependant, il n'y a aucun moyen d'ajouter une proprit non fonctionnelle au prototype. Si vous souhaitez partager des donnes statiques entre toutes les instances (par exemple, Error.prototype.name est le mme pour toutes les instances d'erreur), vous pouvez l'assigner manuellement sur le prototype d'une classe.

js
class Chien {
  constructor(name) {
    this.name = name;
  }
}

Chien.prototype.espece = "chien";

console.log(new Chien("Jack").espece); // "chien"

Cela peut tre rendu plus ergonomique en utilisant des blocs d'initialisation statiques, qui sont appels lorsque la classe est initialise.

js
class Chien {
  static {
    Chien.prototype.espece = "chien";
  }
  constructor(name) {
    this.name = name;
  }
}

console.log(new Chien("Jack").espece); // "chien"

Spcifications

Spcification
ECMAScript 2027 LanguageSpecification
# sec-function-instances-prototype

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page