Aperçu
De quoi parlons-nous lorsque nous parlons de programmation orientée objet?
Nous parlons d'abord de certains concepts: objets, classes, encapsulation, héritage, polymorphisme.
Les objets et les classes sont à la base des objets, et l'encapsulation, l'héritage et le polymorphisme sont les trois principales caractéristiques de la programmation orientée objet.
JavaScript fournit des objets mais manque de classes, et il ne peut pas définir explicitement une classe comme C #.
Cependant, les fonctions de fonction de JavaScript sont très flexibles, dont l'une est le constructeur, qui peut implémenter "classes" en combinaison avec des constructeurs et des objets prototypes.
Concepts d'objets et de classes
Objet
"Object" est un concept très important dans la programmation orientée objet. Un objet est une description d'une "chose" (quelqu'un ou quelque chose).
Les gens et les choses viennent de la vraie vie, et notre compréhension du monde réel est notre compréhension des gens et des choses.
Dans le domaine de la programmation, le code est abstrait pour les gens ordinaires, et l'application du code est de mieux résoudre des problèmes du monde réel.
Au cours des phases d'analyse et de conception, le concept «objet» peut mieux refléter des problèmes du monde réel.
Inversement, le code contient une logique, qui est utilisée pour décrire l'entreprise. L'entreprise contient des connaissances commerciales. Les connaissances commerciales sont résumées par la compréhension et l'analyse du monde réel. Ces problèmes sont composés de «objets» dans le monde réel.
Les objets contiennent des caractéristiques et des comportements. En termes OOP, les fonctionnalités sont des attributs d'objets et les comportements sont des méthodes d'objets.
gentil
Dans le monde réel, des objets similaires peuvent être regroupés en fonction de certaines normes. Par exemple, les «colibris» et les «aigles» sont tous deux divisés en oiseaux. Les oiseaux ne sont pas des objets spécifiques. Ils sont un concept résumé par les personnes après avoir analysé des caractéristiques et des comportements similaires basés sur des oiseaux spécifiques tels que des "colibris" et des "aigles". Une classe équivaut à un modèle, et nous pouvons créer différents objets spécifiques en fonction de ce modèle.
En C #, nous pouvons définir un oiseau.
/// <summary> //// Birds /// </summary> public class Bird {public void fly () {console.writeline ("je peux voler!"); }}Bien que JavaScript soit un langage de programmation orienté objet, il ne fournit pas de prise en charge de la syntaxe pour la classe.
Dans JavaScript, tout est basé sur des objets. Même le "prototype" dont nous parlerons plus tard sont des objets. L'héritage et la réutilisation de JavaScript sont également implémentés via des prototypes.
Cependant, la combinaison des constructeurs et des objets prototypes peut implémenter les "classes" de JavaScript.
Constructeur
Auparavant, nous avons utilisé un nouveau Array () pour créer un tableau et utilisé un nouvel objet () pour créer un objet. Array () et object () sont deux constructeurs intégrés dans JavaScript. Bien que JavaScript ne fournisse pas de classes, nous pouvons comprendre le tableau et l'objet comme le concept de "classes".
Il convient de noter que la "classe" de JavaScript est implémentée par le constructeur.
Définir le constructeur
Les constructeurs sont également des fonctions et il n'y a pas de différence de syntaxe entre la définition des constructeurs et d'autres fonctions.
La seule différence est que la première lettre du constructeur doit être capitalisée, ce qui est également la spécification de programmation de JavaScript.
Ce qui suit définit un constructeur de personne (), que nous pouvons comprendre comme la classe de personne.
function personne () {console.log ('je suis keepfool.');}La "classe" et le constructeur de JavaScript sont définis en même temps. Lors de la définition de "classe" dans JavaScript, le constructeur est défini en même temps.
Utilisation des constructeurs
JavaScript utilise les classes de la même manière que C #, avec le nouveau mot-clé suivi du constructeur.
var p = new personne ();
Définir les attributs et les méthodes
Maintenant que nous avons défini la classe de personne, nous pouvons ajouter des propriétés et des méthodes à la classe de personne.
Définir les attributs
Lorsque nous parlons d'objets JavaScript, nous parlons du paramètre de propriété et de l'accès des objets.
Ce code montre deux façons de définir les propriétés des objets:
var cat = {couleur: 'noir'}; cat.name = 'tom'; console.log (cat.color); console.log (cat.name);Utilisez ceci pour définir les attributs
La méthode de définition d'attribut de la classe JavaScript est quelque peu différente. Utilisez ce mot-clé pour définir les attributs dans le constructeur:
fonction de fonction (nom) {this.name = name;}• La première ligne de code définit la classe de personne et définit le constructeur.
• La deuxième ligne de code définit l'attribut de nom.
Créer et utiliser des objets
Les 2 lignes de code suivantes créent deux objets de classe de classe
var p1 = new personne ('James'); var p2 = new personne ('cury');Sortie P1.Name et P2.Name dans Chrome Console
P1 et P2 sont deux objets différents, la modification de P1.Name n'affectera pas P2.Name.
p1.name = 'LeBron James';
Définir la méthode
Tout d'abord, distinguons les termes "fonction" et "méthode". La «fonction» est une unité indépendante, tandis que la «méthode» dépend de l'existence de la classe comme sujet.
Utilisez-le pour définir des méthodes
Dans JavaScript, la méthode de classe consiste à définir la fonction dans le constructeur et à utiliser ce mot-clé pour définir la méthode dans le constructeur:
fonction de fonction (name) {// définir l'attribut this.name = name; // définir la méthode this.sayhello = function () {return 'bonjour, je suis' + this.name;}}Comment utiliser
Appelez respectivement la méthode Sayhello () des objets P1 et P2 dans la console Chrome
attribut de constructeur
Lorsqu'un objet est créé, une propriété spéciale est automatiquement attribuée à l'objet par JavaScript, et cette propriété est la propriété du constructeur.
Entrez p1.constructor dans la console Chrome et vous pouvez voir que la propriété constructeur de l'objet P1 pointe vers une fonction.
Regardez le contenu de cette fonction, n'est-ce pas le constructeur personne ()?
Cela signifie que nous pouvons également créer des objets via la propriété P1.Contructor,
var p3 = new p1.constructor ('Steve Nash');Cette ligne de code explique une phrase: "Je me fiche de la création de l'objet P1, mais je veux que un autre objet soit créé comme P1!"
En utilisant l'opérateur d'instance dans la console Chrome, vous pouvez voir que P1, P2 et P3 sont tous des cas de classe de personne
De plus, lorsque nous créons l'objet de manière {} , le constructeur objet () est réellement appelé.
var o = {};Cette ligne de code déclare un objet. Bien que nous ne définissions aucune propriété et méthodes, le moteur JavaScript définit l'attribut constructeur par défaut.
o.constructor pointe vers le constructeur objet (), [native code] montre que Object () est une fonction intégrée dans JavaScript.
Objet prototype
Dans JavaScript, lors de la définition d'une fonction, la fonction aura un attribut prototype et le constructeur ne fait pas exception.
La figure suivante montre que la propriété prototype du constructeur personne () est un objet, qui appartient à la fonction , et nous appelons cette propriété un objet prototype.
Du point de vue de la classe de personne, nous pouvons également comprendre que l'attribut prototype appartient à la classe de personne.
Dans le même temps, l'instance de la classe de personne n'a pas d'attribut prototype. Le prototype P1.Protype dans la figure ci-dessus n'est pas défini, ce qui signifie que l'attribut prototype est partagé, ce qui est un peu comme l'attribut statique en C #.
Définition du prototype
Étant donné que le prototype est un objet, vous pouvez y ajouter des propriétés et des méthodes.
La définition des propriétés et des méthodes sur la propriété prototype d'une fonction n'est pas différente de la définition des propriétés et des méthodes d'objets ordinaires.
Le code suivant définit les propriétés et les méthodes pour Person.Protype.
fonction personne (nom) {this.name = name; this.sayhello = function () {return 'bonjour, je suis' + this.name;}} // définir les propriétés et les méthodes sur le prototype d'objet du constructeur personne.prototype.height = 176; person.prototype.run = function () {return 'i am' + this.name + ', je suis en cours! Personne ('James');Utilisation du prototype
Propriétés et méthodes prototypes définies en personne. Le prototype peut être utilisé directement par des instances de classe de personne et est toujours utilisé sous forme d' object.property .
Il convient de noter que name et sayHello() sont des instances appartenant à la classe de personne, tandis que height et run() sont des instances n'appartenant pas à la classe de personne.
Conseils: vous pouvez vérifier si l'objet contient une certaine propriété ou méthode via la méthode HasownProperty.
Attributs prototypes
Une instance de classe de personne peut utiliser les deux propriétés dans la classe de personne et les propriétés en personne. Prototype.
Alors, quelle est la différence entre les propriétés de la classe des personnes et les propriétés de la personne. ProTotype?
Tout d'abord, nous pouvons comprendre les propriétés et les méthodes de la classe de personne comme "propriétés d'instance".
Étant donné que le prototype est partagé, nous pouvons comprendre les propriétés et les méthodes dans le prototype comme "propriétés partagées".
La différence entre les «attributs d'instance» et les «attributs partagés» se reflète principalement dans les performances.
Chaque fois qu'une instance de personne est créée, une copie de l'attribut de nom et de la méthode sayhello () seront générées, et l'attribut de hauteur et la méthode run () partageront une copie de toutes les instances.
Cela étant le cas, cela signifie que la méthode sayhello () peut être mentionnée dans le prototype.
De plus, la hauteur de l'instance de la personne différente peut être différente, il devrait donc être plus raisonnable de le mettre dans la classe des personnes.
fonction personne (nom, hauteur) {this.name = name; this.height = height;} personne.prototype.sayhello = function () {return 'bonjour, je suis' + this.name + ', ma hauteur est' + this.height + 'cm.' ';} personne.prototype.run = fonction () {return' je suis '+ this.name +', je cours! Personne («James», 203); var p2 = nouvelle personne («Cury», 190);Résumé de la mise en œuvre de la classe
JavaScript n'a pas de classes, mais les constructeurs peuvent implémenter des "classes".
Selon les spécifications de programmation JavaScript, la première lettre du constructeur doit être capitalisée.
Les propriétés et les méthodes de «classe» sont définies dans le constructeur dans cette méthode de la propriété.
Lorsque la création d'objets est créée, JavaScript attribue l'attribut de constructeur à l'objet. L'attribut de constructeur est une référence à la fonction du constructeur d'objets.
La fonction a déjà un attribut prototype lorsqu'il est défini, et l'attribut prototype est également un objet.
Le prototype est partagé, et les propriétés et méthodes définies sur le prototype peuvent être utilisées par les cas de la "classe".
Si les propriétés ou les méthodes peuvent être définies sur le prototype, ne les définissez pas sur les constructeurs. L'utilisation du prototype peut réduire les frais généraux de mémoire.
L'article ci-dessus sur JavaScript OOP - les détails de l'implémentation de classe sont tout le contenu que j'ai partagé avec vous. J'espère que vous pourrez vous faire référence et j'espère que vous pourrez soutenir Wulin.com plus.