Les objets sont tout ce que les gens veulent étudier, des entiers les plus simples aux avions complexes, etc., qui peuvent non seulement représenter des choses concrètes, mais aussi des règles, des plans ou des événements abstraits. - QUIVÉ DE LA BAIDU ENCYCLOPÉDIE
La programmation orientée objet est actuellement le modèle de programmation le plus populaire. Mais il est frustrant que, en tant que JavaScript frontal le plus utilisé, ne prenne pas en charge les objets.
JavaScript n'a pas de caractères de contrôle d'accès, il ne définit pas la classe de mots clés, il ne prend pas en charge l'extension ou le côlon héréditaire, et il n'utilise pas virtuel pour prendre en charge les fonctions virtuelles. Cependant, JavaScript est une langue flexible. Jetons un coup d'œil à la façon dont JavaScript sans classe de mots clés implémente la définition de la classe et crée des objets.
Définissez la classe et créez l'objet d'instance de la classe
Dans JavaScript, nous utilisons la fonction pour définir la classe, comme suit:
La copie de code est la suivante:
Fonction Forme ()
{
var x = 1;
var y = 2;
}
Vous pourriez dire, doute? N'est-ce pas une fonction déterminante? C'est vrai, c'est une fonction déterminante. Nous définissons une fonction de forme et initialisons x et y. Cependant, si vous le regardez sous une autre perspective, il s'agit de définir une classe de forme, qui contient deux propriétés X et Y, et les valeurs initiales sont respectivement de 1 et 2. Cependant, les mots clés que nous définissons la classe sont fonctions plutôt que la classe.
Ensuite, nous pouvons créer une cendrier d'objet de la classe de forme, comme suit:
La copie de code est la suivante:
var ashape = nouvelle forme ();
Définir les propriétés publiques et privées
Nous avons créé un objet Ashape, mais lorsque nous essayons d'accéder à ses propriétés, nous obtenons une erreur comme ceci:
La copie de code est la suivante:
Ashape.x = 1;
Cela montre que les propriétés définies avec VAR sont privées. Nous devons utiliser ce mot-clé pour définir les attributs publics.
La copie de code est la suivante:
Fonction Forme ()
{
this.x = 1;
this.y = 2;
}
De cette façon, nous pouvons accéder aux propriétés de forme, telles que:
La copie de code est la suivante:
Ashape.x = 2;
OK, nous pouvons résumer à partir du code ci-dessus: Utilisation de VAR pour définir l'attribut privé de la classe et l'utiliser pour définir l'attribut public de la classe.
Définir des méthodes publiques et privées
Dans JavaScript, une fonction est une instance de la classe de fonction, et la fonction est indirectement héritée de l'objet, donc une fonction est également un objet. Par conséquent, nous pouvons créer une fonction à l'aide de la méthode d'affectation. Bien sûr, nous pouvons également attribuer une fonction à une variable d'attribut de la classe. Ensuite, cette variable d'attribut peut être appelée méthode car il s'agit d'une fonction exécutable. Le code est le suivant:
La copie de code est la suivante:
Fonction Forme ()
{
var x = 0;
var y = 1;
this.Draw = function ()
{
//imprimer;
};
}
Nous définissons un dessin dans le code ci-dessus et y attribuons une fonction. Ci-dessous, nous pouvons appeler cette fonction par Ashape, qui est appelé une méthode publique dans la POO, comme:
La copie de code est la suivante:
Ashape.Draw ();
S'il est défini avec VAR, alors le tirage devient privé, qui est appelé une méthode privée dans la POO, comme:
La copie de code est la suivante:
Fonction Forme ()
{
var x = 0;
var y = 1;
var draw = function ()
{
//imprimer;
};
}
De cette façon, vous ne pouvez pas utiliser Ashape.Draw pour appeler cette fonction.
Constructeur
JavaScript ne prend pas en charge la POO, donc bien sûr, il n'y a pas de constructeur. Cependant, nous pouvons simuler un constructeur nous-mêmes et faire l'objet appelé automatiquement lorsqu'il est créé. Le code est le suivant:
La copie de code est la suivante:
Fonction Forme ()
{
var init = fonction ()
{
// code constructeur
};
init ();
}
À la fin de la forme, nous avons artificiellement appelé la fonction init. Ensuite, lors de la création d'un objet de forme, init sera toujours appelé automatiquement, ce qui peut simuler notre constructeur.
Constructeur avec paramètres
Comment faire en sorte que le constructeur prenne des paramètres? En fait, c'est très simple. Écrivez simplement les paramètres à transmettre dans la liste des paramètres de fonction, tels que:
La copie de code est la suivante:
Forme de la fonction (AX, AY)
{
var x = 0;
var y = 0;
var init = fonction ()
{
//Constructeur
x = ax;
y = ay;
};
init ();
}
De cette façon, nous pouvons créer l'objet comme ceci:
La copie de code est la suivante:
var ashape = nouvelle forme (0,1);
Propriétés statiques et méthodes statiques
Comment définir les propriétés et méthodes statiques en JavaScript? Comme indiqué ci-dessous:
La copie de code est la suivante:
Forme de la fonction (AX, AY)
{
var x = 0;
var y = 0;
var init = fonction ()
{
//Constructeur
x = ax;
y = ay;
};
init ();
}
Forme.count = 0; // définir un nombre de propriétés statiques, qui appartient à la classe, et non à l'objet.
Shape.staticMethod = function () {}; // définir une méthode statique
Avec des propriétés et des méthodes statiques, nous pouvons y accéder avec des noms de classe, comme suit:
La copie de code est la suivante:
alerte (Ashape.Count);
Ashape.staticMethod ();
Remarque: les propriétés et méthodes statiques sont toutes deux publiques. Jusqu'à présent, je ne sais pas comment faire des propriétés et méthodes statiques privées ~
Accéder aux propriétés publiques et privées de cette classe dans une méthode
Accéder à vos propres propriétés dans les méthodes de classe. Les méthodes d'accès de JavaScript pour les propriétés publiques et privées sont différentes. Veuillez consulter le code suivant:
La copie de code est la suivante:
Forme de la fonction (AX, AY)
{
var x = 0;
var y = 0;
this.gx = 0;
this.gy = 0;
var init = fonction ()
{
x = ax; // ajouter des attributs privés et écrire directement le nom de la variable
y = ay;
this.gx = ax; // Pour accéder aux attributs publics, vous devez l'ajouter avant le nom de la variable.
this.gy = ay;
};
init ();
}
Choses à noter à ce sujet
Selon mon expérience, cela dans la classe ne pointe pas toujours vers notre objet lui-même. La raison principale est que JavaScript n'est pas un langage OOP, et les fonctions et les classes sont définies par des fonctions, ce qui provoquera bien sûr certains problèmes mineurs.
La situation où ce pointeur pointe incorrectement est généralement dans le traitement des événements. Nous voulons que la fonction membre d'un certain objet réponde à un événement. Lorsque l'événement est déclenché, le système appellera notre fonction de membre. Cependant, le passage passé ce pointeur n'est plus notre propre objet. Bien sûr, ce sera une erreur d'appeler cela dans la fonction membre pour le moment.
La solution consiste à enregistrer cela dans une propriété privée au début de la classe de définition. Plus tard, nous pouvons utiliser cette propriété au lieu de cela. J'utilise ce pointeur avec cette méthode est assez sûre et sans souci ~
Modifions le code pour résoudre ce problème. En comparant le code dans la partie 6, vous comprendrez certainement:
La copie de code est la suivante:
Forme de la fonction (AX, AY)
{
var _this = this; // Enregistrez ceci et utilisez _ceur au lieu de cela à l'avenir afin que vous ne soyez pas confus
var x = 0;
var y = 0;
_This.gx = 0;
_This.gy = 0;
var init = fonction ()
{
x = ax; // ajouter des attributs privés et écrire directement le nom de la variable
y = ay;
_This.gx = ax; // Pour accéder aux attributs publics, vous devez l'ajouter avant le nom de la variable.
_This.gy = ay;
};
init ();
}
Ci-dessus, nous avons expliqué comment définir des classes en JavaScript, créer des objets de classe, créer des propriétés et méthodes publiques et privées, créer des propriétés et méthodes statiques, simuler les constructeurs et discuter de cette erreur.
Il s'agit de l'implémentation de la POO dans JavaScript. Ce qui précède est le contenu le plus pratique. Généralement, JavaScript définit les classes et utiliser le code ci-dessus pour créer des objets est suffisant. Bien sûr, vous pouvez également utiliser des mootools ou un prototype pour définir des classes et créer des objets. J'ai utilisé le framework Mootools et ça fait du bien. Il est plus parfait pour la simulation de classe JavaScript et prend en charge l'héritage des classes. Les lecteurs intéressés peuvent l'essayer. Bien sûr, si vous utilisez un framework, vous devez inclure des fichiers d'en-tête JS pertinents dans votre page Web. Par conséquent, j'espère toujours que les lecteurs pourront créer des classes sans cadre. De cette façon, le code est plus efficace, et vous pouvez également voir qu'il n'est pas difficile de créer une classe simple ~