Je pense que tout le monde a ses propres opinions sur la question de savoir si JavaScript est une langue orientée objet ou une langue orientée objet. Ces fidèles fans de JavaScript doivent dire que JavaScript est une langue orientée objet. Par exemple, la déclaration sur JavaScript dans le livre "Le retour du roi de JavaScript" est basée sur le prototype orienté objet. Permettez-moi de parler de mon opinion personnelle. Les trois caractéristiques orientées objet: héritage, polymorphisme et encapsulation. Bien que JavaScript ne soit pas aussi rapide que les langages orientés objet tels que Java et C #, il a également un certain support après tout. Par conséquent, il est logique de dire que JavaScript est un langage orienté objet, mais d'après la partie successive, il existe une série de méthodes d'héritage, mais chaque méthode d'héritage ne peut pas réaliser la puissance d'un langage véritablement orienté objet. Par conséquent, il est farfelu de dire qu'il est orienté objet. En résumé, ma compréhension de JavaScript est plus disposée à l'appeler un objet simplifié, ou orienté objet "orienté objet (ce pseudo-mot n'a pas de signification désobligeante).
Aujourd'hui, parlons de la première fonctionnalité de l'objet d'objets: l'héritage.
Qu'est-ce que l'héritage? Je ne veux pas en parler non-sens. Il y a un animal, une personne et une fille. Il s'agit de la chaîne d'héritage la plus simple et la plus typique.
Dans des objets, comme C #, c'est facile.
La copie de code est la suivante:
animal de classe
{}
Personnes de classe: Animal
{}
Girl de classe: les gens
{}
Donc, dans JavaScript, il n'y a pas de classe ou d'héritage pour fournir une implémentation, que devons-nous faire?
Disguiseur d'objet (méthode de succession de construction)
Qu'est-ce que le camouflage des objets? Ce que nous pourrions appeler l'héritage de construction est plus facile à comprendre. Comme son nom l'indique, il s'agit d'utiliser des constructeurs pour jouer avec l'héritage. En fait, cela signifie que le constructeur de la classe parent est considéré comme une méthode ordinaire et le met dans le constructeur de sous-classe à exécuter. De cette façon, lors de la construction d'un objet, l'objet sous-classe peut bien sûr construire la méthode de la classe parent!
Utilisons l'exemple ci-dessus, le code est le suivant:
La copie de code est la suivante:
fonction Animal ()
{
this.run = function () {alert ("je peux exécuter");};
}
fonction des gens (nom)
{
// Ici, la méthode de construction de la classe parent est transmise, puis la méthode de construction de la classe parent est exécutée. Pour le moment, les méthodes de la classe parent peuvent être utilisées.
this.father = animal;
this.fher ();
// N'oubliez pas de le supprimer, sinon lorsque la sous-classe est ajoutée à la méthode avec le même nom que la classe parent, elle sera modifiée à la classe parent.
Supprimer ce que le père;
this.name = name;
this.say = function () {alert ("mon nom est" + this.name);}
}
Fonction Girl (nom, âge)
{
this.fher = les gens;
this.fère (nom);
Supprimer ce que le père;
this.age = âge;
this.introduce = function () {alert ("mon nom est" + this.name + ". je suis" + this.age);};
}
De cette façon, une chaîne d'héritage est mise en œuvre et le test est:
La copie de code est la suivante:
var a = nouvel animal ();
a.run ();
var p = de nouvelles personnes ("enroulement");
p.run ();
P.Say ();
var g = nouvelle fille ("Xuan", 22);
g.run ();
g.say ();
g.introduce ();
Les résultats sont les suivants:
un.
né
c.
d.
e.
f.
Le test a réussi!
Résumons la clé de ce code, spécifions la classe parent, déclarons l'objet de classe parent, puis supprimons les variables temporaires. Pensez-vous que c'est un peu gênant? C'est du moins ce que je pense. Une fois que j'oublie de supprimer, je dois supporter le risque de modification de la classe parent. Pour cela, nous utilisons l'appel et nous appliquons pour améliorer cela!
Regardons le code et l'exemple ci-dessus (pour faciliter la compréhension de tout le monde, la nécessité de la changer, Animal a un nom):
La copie de code est la suivante:
Fonction Animal (nom)
{
this.run = function () {alert ("je peux exécuter");};
}
fonction des gens (nom)
{
// Utiliser la méthode d'appel pour implémenter l'héritage
this.father = animal;
this.father.call (ce, nom);
this.name = name;
this.sayName = function () {alert ("mon nom est" + this.name;);};
}
Fonction Girl (nom, âge)
{
// Utilisez la méthode d'application pour mettre en œuvre l'héritage
this.fher = les gens;
this.father.Apply (this, nouveau tableau (nom));
this.age = âge;
this.introduce = function () {alert ("mon nom est" + this.name + ". je suis" + this.age);};
}
En utilisant le même code de test, il a été constaté que le test était tout aussi réussi.
Si vous êtes novice, vous pouvez vous sentir un peu étourdi lorsque vous regardez les deux codes ci-dessous. Qu'est-ce que l'appel et que s'applique? OK, dans le sujet spécial de l'héritage de Wanzhuan, j'ai ajouté une série de problèmes supplémentaires. Si vous ne comprenez pas cela, vous pouvez lire mon article: "Mot de Wanzhuan: Appelez et postulez".
Le déguisement des objets n'est qu'un moyen de mettre en œuvre l'héritage. Dans le prochain article, je continuerai à écrire sur d'autres méthodes d'héritage et les avantages et les inconvénients de plusieurs méthodes d'héritage. Bienvenue pour continuer à faire attention.