| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Function/prototype | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
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.
Un objet.
Attributs de Function : proprit prototype | |
|---|---|
| crivable | Oui |
| numrable | Non |
| Configurable | Non |
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.
Lorsque une fonction est appele avec new, la proprit prototype du constructeur devient le prototype de l'objet rsultant.
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 :
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 :
const methode = { toto() {} }.toto;
const fonctionFlechee = () => {};
async function fonctionAsynchrone() {}
Les constructeurs valides suivants ont une proprit prototype :
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.
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.)
function Ctor() {}
Ctor.prototype = 3;
console.log(Object.getPrototypeOf(new Ctor()) === Object.prototype); // true
function Ctor() {}
const p1 = new Ctor();
const p2 = new Ctor();
Ctor.prototype.prop = 1;
console.log(p1.prop); // 1
console.log(p2.prop); // 1
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.
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.
class Chien {
static {
Chien.prototype.espece = "chien";
}
constructor(name) {
this.name = name;
}
}
console.log(new Chien("Jack").espece); // "chien"
| Spcification |
|---|
| ECMAScript 2027 LanguageSpecification # sec-function-instances-prototype |
Cette page a t modifie le 22 mai 2026 par les contributeurices du MDN.
FunctionObject/FunctionObject.prototype.__defineGetter__()Object.prototype.__defineSetter__()Object.prototype.__lookupGetter__()Object.prototype.__lookupSetter__()Object.prototype.hasOwnProperty()Object.prototype.isPrototypeOf()Object.prototype.propertyIsEnumerable()Object.prototype.toLocaleString()Object.prototype.toString()Object.prototype.valueOf()Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |