262 votes

Qu'est-ce que cela signifie que Javascript est un langage basé sur des prototypes ?

L'un des principaux avantages de Javascript est qu'il s'agit d'un langage basé sur des prototypes.

Mais qu'est-ce que cela signifie que Javascript est basé sur un prototype, et pourquoi est-ce un avantage ?

3 votes

Cette réponse explique tout ce que vous devez savoir sur l'héritage prototypique : stackoverflow.com/a/16872315/783743

300voto

keparo Points 13747

Héritage prototypique est une forme d'orientation objet réutilisation du code . Javascript est l'un des seuls langages orientés objet [grand public] à utiliser l'héritage prototypique. Presque tous les autres langages orientés objet sont classiques.

Sur héritage classique Le programmeur écrit une classe, qui définit un objet. Plusieurs objets peuvent être instanciés à partir de la même classe, de sorte que vous disposez d'un code unique qui décrit plusieurs objets dans votre programme. Les classes peuvent ensuite être organisées en une hiérarchie, ce qui favorise la réutilisation du code. Le code plus général est stocké dans une classe de niveau supérieur, dont héritent les classes de niveau inférieur. Cela signifie qu'un objet partage du code avec d'autres objets de la même classe, ainsi qu'avec ses classes parentes.

En el héritage prototypique forme, objets hériter directement d'autres objets. Tout ce qui concerne les classes disparaît. Si vous voulez un objet, vous écrivez simplement un objet. Mais la réutilisation du code est toujours une chose précieuse, donc les objets peuvent être liés entre eux dans une hiérarchie. En javascript, chaque objet a un lien secret avec l'objet qui l'a créé, formant une chaîne. Lorsqu'on demande à un objet une propriété qu'il n'a pas, on demande à son objet parent... et ainsi de suite jusqu'à ce que la propriété soit trouvée ou que l'objet racine soit atteint.

Chaque fonction en JavaScript (qui sont elles-mêmes des objets) possède en fait un membre appelé "prototype", qui est chargé de fournir des valeurs lorsque l'objet les demande. La présence de ce membre permet au mécanisme du constructeur (par lequel les objets sont construits à partir de fonctions) de fonctionner. L'ajout d'une propriété au prototype d'un objet fonction la rendra disponible à l'objet construit, ainsi qu'à tous les objets qui en héritent.

Avantages

Il n'y a peut-être pas de règle absolue expliquant pourquoi l'héritage prototypique est une forme avantageuse de réutilisation du code. La réutilisation du code en elle-même est avantageuse, et l'héritage prototypique est une manière raisonnable de s'y prendre. Vous pourriez argumenter que l'héritage prototypique est une forme de réutilisation du code assez simple. modèle simple de la réutilisation du code, et que le code peut être fortement réutilisé en moyens directs . Mais les langues classiques sont certainement capables d'accomplir cela aussi.

Sidenote : @Andrew Hedges fait un bon point, qu'il y a en fait beaucoup de les langages prototypiques. Il est intéressant de noter que ces autres langages existent, mais aussi qu'aucun d'entre eux n'est proche du courant dominant. NewtonScript a semblé avoir un certain attrait pendant un certain temps, mais est mort avec sa plate-forme. Il est également possible d'étendre certains langages modernes de manière à ajouter des capacités de prototypage.

9 votes

Hey Kelly. Bien que JavaScript soit de loin le langage prototypique le plus populaire, il en existe de nombreux autres : fr.wikipedia.org/wiki/Prototype-based_programming#Languages

2 votes

Salut Andrew. Bon point. J'aurais dû être plus clair. J'en prendrai note.

3 votes

Veuillez également lire ceci developer.mozilla.org/fr/JavaScript/Guide/

55voto

Guido García Points 13252

Un langage basé sur des prototypes ne fait pas la distinction entre classes et objets : il a simplement des objets. Un langage basé sur des prototypes a la notion d'objet prototypique, un objet utilisé comme modèle à partir duquel on peut obtenir les propriétés initiales d'un nouvel objet. Tout objet peut spécifier ses propres propriétés, soit lors de sa création, soit au moment de son exécution. En outre, tout objet peut être associé comme prototype d'un autre objet ce qui permet au deuxième objet de partager les propriétés du premier.

6 votes

Une très bonne explication, mais un peu trompeuse avec le commentaire sur le "modèle pour les propriétés initiales". Si vous modifiez le prototype APRÈS avoir instancié un objet, cet objet reçoit toujours ces fonctions.

33voto

CMS Points 315406

La programmation basée sur des prototypes est un style de programmation orientée objet dans lequel les classes ne sont pas présentes, et la réutilisation du comportement (ou l'héritage dans les langages basés sur des classes) est effectuée en clonant des objets existants qui servent de prototypes.

0 votes

Tu te sens toujours comme ça ? Parce que si c'est le cas, c'est la première explication qui m'a vraiment fait "tilt".

11voto

questzen Points 1963

L'avantage/inconvénient est que nous pouvons créer de nouveaux types d'objets au moment de l'exécution sans avoir besoin de définir des classes (code statique). Comme la plupart des fonctionnalités, c'est au développeur d'en faire un avantage/inconvénient.

Ce qui précède est possible parce que les objets sont essentiellement des fonctions en java script (les fermetures aussi).

0 votes

Les objets dynamiques sont un avantage de javascript, mais ils ne sont pas vraiment liés au fait que javascript est un langage prototypique ou fonctionnel. Dans de nombreux langages classiques, vous pouvez créer des objets dynamiques au moment de l'exécution. Les fermetures ne sont pas vraiment liées non plus.

2 votes

Les classes ne sont pas nécessairement un code statique - regardez Python, dans lequel les classes sont elles-mêmes des objets, et sont construites à partir de métaclasses qui sont également des objets.

6voto

Greg Points 132247

Au lieu de déclarer une structure de classe, vous pouvez créer des objets du même type, et compléter leur définition à tout moment en utilisant le prototype de l'objet. C'est plus flexible que la façon normale de faire les choses.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X