Maison  >  Article  >  interface Web  >  Javascript joue avec l'héritage (1)_compétences javascript

Javascript joue avec l'héritage (1)_compétences javascript

WBOY
WBOYoriginal
2016-05-16 16:49:021195parcourir

Je pense que chacun a sa propre opinion quant à savoir si Javascript est un langage orienté objet ou un langage qui prend en charge les objets. Les fidèles fans de Javascript doivent dire que Javascript est un langage orienté objet. Par exemple, le livre "Le retour du roi de Javascript" décrit Javascript comme étant orienté objet basé sur des prototypes. Permettez-moi de partager mon opinion personnelle. Les trois caractéristiques de l'orientation objet, de l'héritage, du polymorphisme et de l'encapsulation. Bien que Javascript ne soit pas aussi rapide à implémenter que les langages orientés objet tels que Java et C#, il bénéficie néanmoins d'un certain support. Il est donc logique de dire que Javascript est un langage orienté objet. Cependant, du point de vue de l'héritage, 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 véritable langage orienté objet. on dit que c'est orienté objet. Un peu tiré par les cheveux. Pour résumer, ma compréhension de Javascript est que je préfère l'appeler orienté objet simplifié, ou "pseudo" orienté objet (ce pseudo mot n'a aucune signification péjorative).

Aujourd'hui, nous allons parler de la première fonctionnalité de l'orientation objet : l'héritage.
Qu'est-ce que l'héritage ? Je ne veux pas dire de bêtises à ce sujet. Il y a un animal, une personne et une fille. C'est la chaîne d'héritage la plus simple et la plus typique.
Dans les langages orientés objet comme C#, c'est simple.

Copier le code Le code est le suivant :

classe Animal
{ }
classe Personnes :Animal
{ }
classe Fille :Personnes
{ }

Donc en Javascript, il n'y a pas de classe ou d'héritage pour assurer l'implémentation, que devons-nous faire ?
Camouflage d'objet (méthode d'héritage de construction)
Qu'est-ce que le camouflage d'objet ? Nous pourrions appeler cela l’héritage structurel pour le rendre plus facile à comprendre. Comme son nom l'indique, vous utilisez 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 est exécuté dans le constructeur de la sous-classe. Dans ce cas, lors de la construction de l'objet, l'objet de la sous-classe peut bien sûr construire la méthode de la classe parent. classe parentale !

Toujours en utilisant l'exemple ci-dessus, le code est le suivant :

Copier le code Le code est le suivant :

fonction Animal()
{
         .Run=function(){alert("I can run");};
}
function People(name)
{
//Ici, le constructeur de la classe parent est passé in , puis exécutez la méthode constructeur de la classe parent. À ce stade, // vous pouvez utiliser les méthodes de la classe parent.
this.father=Animal;
this.father();
//N'oubliez pas de supprimer, sinon lorsque la sous-classe ajoute une méthode du même nom à la classe parent, elle sera modifiée en classe parent. classe.
supprimer this.Father;
this.name=name;
this.Say=function(){alert("Mon nom est " this.name);}
}
function Girl (nom, âge)
{
this.father=People;
this.father(name);
delete this.father; Introduce=function(){alert("Je m'appelle " this.name ". Je suis " this.age);}
}


Dans ce cas, une chaîne d'héritage est implémentée. Testez-la :

var a=new Animal(); 🎜>a .Run();
var p=new People("Windking");
p.Run();
p.Say(); Xuan", 22);
g.Run();
g.Say();
g.Introduce();

Les résultats sont les suivants :

a.

b.

c.

d.

e.

f.

Test réussi !

Résumons les points clés de ce code, spécifions la classe parent, déclarons l'objet de classe parent, puis supprimons les variables temporaires. Trouvez-vous cela gênant ? Du moins c'est ce que je pense. Une fois que vous oubliez de supprimer, vous devez toujours supporter le risque que la classe parent soit modifiée. Pour cela, nous utilisons call et apply pour améliorer cela !
Regardons le code, toujours l'exemple ci-dessus (afin de faciliter la compréhension de tous, les exigences ont été modifiées, l'animal a un nom) :

Copier le code Le code est le suivant :

fonction Animal(nom)
{
this.Run=function(){alert("I can Run");};
}
function People(name)
{
//Utilisez la méthode d'appel pour implémenter l'héritage
this.père=Animal;
this.father.call(this,name);
this.name=name;
this.SayName=function(){alert("Mon nom est " this.name;) ;};
}
function Girl(name,age)
{
//Utilisez la méthode apply pour implémenter l'héritage
this.father=People; this.father.apply( this,new Array(name));
this.age=age;
this.Introduce=function(){alert("Mon nom est " this.name ". Je suis " cet.âge);}
}

En utilisant le même code de test, le test s'est avéré tout aussi réussi.

Si vous êtes novice, vous pourriez vous sentir un peu confus après avoir regardé les deux morceaux de code suivants : Qu'est-ce que l'appel et qu'est-ce qui s'applique ? Eh bien, dans le sujet jouer avec l'héritage, j'ai ajouté une série de suppléments. Si vous ne comprenez pas cela, vous pouvez lire mon article : "Jouer avec les méthodes : appeler et postuler".

Le camouflage d'objet n'est qu'un moyen d'obtenir l'héritage. Dans le prochain article, je continuerai à écrire sur d'autres méthodes d'héritage et sur les avantages et les inconvénients de plusieurs méthodes d'héritage. Bienvenue pour continuer à y prêter attention.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn