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?
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?
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.
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.
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.
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 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.