55 votes

JavaScript est-il orienté objet?

Quelques questions ont été posées pour savoir si JavaScript est un langage orienté objet. Même une déclaration, "juste parce qu'un langage a des objets ne le rend pas OO".

JavaScript est-il un langage orienté objet?

53voto

AnthonyWJones Points 122520

L'OMI (et ce n'est qu'une opinion) les principales caractéristiques d'un langage orienté objet serait qu'il aurait l'appui de polymorphisme. À peu près tous les langages dynamiques de le faire.

La caractéristique suivante serait d'encapsulation et qui est assez facile à faire en Javascript aussi.

Cependant, dans l'esprit de beaucoup, c'est l'héritage (en particulier la mise en œuvre de l'héritage) qui ferait pencher la balance pour savoir si une langue peut être appelé orientée objet.

Le Javascript n'est assez facile de moyens pour hériter de la mise en œuvre par le prototypage, mais c'est au détriment de l'encapsulation.

Donc, si vos critères de l'orientation de l'objet est le classique trio de polymorphisme, l'encapsulation et l'héritage Javascript ne passe pas.

Edit: La question supplémentaire se pose "comment prototypes héritage sacrifice d'encapsulation?" Prenons cet exemple de non-approche prototypes:-

function MyClass() {
    var _value = 1;
    this.getValue = function() { return _value; }
}

Le _value attribut est encapsulé, il ne peut pas être modifié directement par le code externe. On peut ajouter un mutateur à la classe de le modifier d'une manière entièrement contrôlé par le code qui est partie de la classe. Maintenant, considérons une approche prototypes à la même classe:-

function MyClass() {
  var _value = 1;
}
MyClass.prototype.getValue = function() { return _value; }

Eh bien, ce est cassé. Depuis la fonction attribuée à getValue est plus étendue avec _value il ne peut pas y accéder. Nous aurions besoin de promouvoir _value à un attribut d' this mais qui le rendrait accessible en dehors du contrôle de code écrit pour la classe, d'où l'encapsulation est cassé.

Malgré cela mon vote reste que le Javascript est orientée objet. Pourquoi? Parce qu'étant donné un OOD je peux la mettre en œuvre en Javascript.

36voto

Eli Bendersky Points 82298

La réponse courte est Oui. Pour plus d'informations:

De Wikipedia:

JavaScript est fortement basée sur les objets. Les objets sont des tableaux associatifs, augmentée à l'aide de prototypes (voir ci-dessous). Objet des noms de propriété associative la matrice de touches: obj.x = 10 et obj["x"] = 10 sont équivalents, la notation par points simple sucre syntaxique. Propriétés et leurs valeurs peuvent être ajouté, modifié ou supprimé à au moment de l'exécution. Les propriétés d'un objet peut également être énumérés par l'intermédiaire d'un de... de la boucle.

Voir également cette série d'articles sur la programmation orientée objet avec Javascript.

24voto

jop Points 31978

Javascript est un langage multi-paradigme qui prend en charge les styles de programmation procéduraux, orientés objet (basés sur des prototypes) et fonctionnels.

Voici un article expliquant comment utiliser OO en Javascript.

19voto

Eevee Points 18333

Les langues n'ont pas besoin de se comporter exactement comme Java orienté objet. Tout en Javascript est un objet, à comparer à C++ ou une version antérieure de Java, qui sont largement considérées comme orientées objet à un certain degré, mais toujours basée sur les primitives. Le polymorphisme est un non-problème en Javascript, car il n'a pas beaucoup de soin sur les types. La seule base OO fonctionnalité qui n'est pas directement pris en charge par la syntaxe de l'héritage, mais qui peut facilement être mis en œuvre cependant, le programmeur veut à l'aide de prototypes: ici est un exemple.

10voto

munificent Points 6516

JavaScript est orienté objet, mais n'est pas un langage orienté objet basé sur une classe comme Java, C ++, C #, etc. Les langages POO basés sur des classes sont un sous-ensemble de la grande famille des langages POO qui incluent également des langages basés sur un prototype comme JavaScript et soi.

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