Avant de faire quelque chose, vous devez d'abord être clair sur les avantages de le faire. Je crois que personne n'est prêt à faire des choses sans raison. D'une manière générale, lorsque nous concevons des cours, nous espérons réellement réduire la duplication du code. L'utilisation de l'héritage peut le faire parfaitement. Avec l'aide du mécanisme d'héritage, vous pouvez concevoir à nouveau en fonction des classes existantes et utiliser pleinement les différentes méthodes dont ils disposent déjà, et modifier la conception plus facilement. Je ne dirai pas beaucoup de bêtises, donnez un exemple:
La copie de code est la suivante:
fonction de fonction (nom) {
this.name = name;
}
Personne.prototype.getName = function () {
Renvoie ce.name;
}
Bloger de fonction (nom, blog) {
Personne.Call (ceci, nom);
this.blog = blog;
}
var bloger = nouveau blogueur ("zhen", "// www.vevb.com");
alert (bloger.name == "zhenn"); / * Retour à Ture * /
alert (bloger.blog) /*tip//www.vevb.com*/
alert (bloger.getName () == "Zhenn"); / * Tip "bloger.getName n'est pas une fonction" * /
D'après l'exemple ci-dessus, nous pouvons voir que le blogueur appelle dynamiquement les propriétés et les méthodes natives de sa personne de classe parent à travers un appel à l'intérieur (pour l'explication de l'appel, veuillez vous référer à //www.vevb.com/article/62086.htm), qui peut être comprise en tant que blogueur hérite de la personne et devient une sous-classe. Cependant, les élèves prudents constateront que les méthodes de l'objet Person Prototype ne peuvent pas être héritées en s'appuyant uniquement sur l'appel, c'est pourquoi il invite "Bloger.getName n'est pas une fonction". Mais ne vous inquiétez pas, traitez simplement le code ci-dessus pour résoudre ce problème!
La copie de code est la suivante:
fonction de fonction (nom) {
this.name = name;
}
Personne.prototype.getName = function () {
Renvoie ce.name;
}
Bloger de fonction (nom, blog) {
Personne.Call (ceci, nom);
this.blog = blog;
}
/ * Veuillez noter les deux lignes de code suivantes * /
Bloger.prototype = new personne ();
Bloger.prototype.constructor = blogueur;
var bloger = nouveau blogueur ("zhen", "// www.vevb.com");
alert (bloger.name == "zhenn"); / * Retour à Ture * /
alert (bloger.blog) /*tip//www.vevb.com*/
alert (bloger.getName () == "Zhenn"); / * invite true * /
Ici, nous devons expliquer ces deux lignes de code. Nous savons que chaque constructeur a un attribut prototype, qui pointe vers l'objet prototype du constructeur. En fait, l'objet Prototype est également un objet d'instance, mais les attributs et méthodes définis dans l'objet Prototype peuvent être fournis à tous les objets d'instance à partager. À partir de cela, nous pouvons voir que l'intention d'ajouter deux lignes de code est de définir l'objet prototype de la sous-classe pour pointer un objet instancié de la classe parent, et l'objet instancié de la classe parent héritera de toutes les méthodes d'attribut prototype de la classe parent, qui atteint notre objectif. Le prototype de la sous-classe hérite des propriétés et des méthodes de tous les objets d'instance de classe parent.
Cependant, vous devez également noter que bloger.prototype.constructor = blogueur; Cette ligne de code, car lorsque le prototype de sous-classe est défini sur l'instance de la classe parent, son attribut de constructeur pointera vers la classe parent, de sorte que le constructeur du prototype de sous-classe doit être défini sur la sous-classe. À ce stade, l'héritage de la classe de JavaScript a été parfaitement implémenté!
Afin de simplifier la déclaration de sous-classes, l'ensemble du processus d'extension des sous-classes peut être écrit dans une fonction appelée Extend, qui est de créer une nouvelle classe basée sur une structure de classe donnée:
La copie de code est la suivante:
fonction extension (classe d'enfants, parentClass) {
var f = nouvelle fonction ();
F.prototype = parentClass.prototype;
casclass.prototype = new f ();
casclass.prototype.constructor = casque;
}
Avec cette fonction étendue, vous pouvez facilement prolonger la sous-classe. Appelez simplement cette fonction. Les deux lignes de code ajoutées ci-dessus peuvent être modifiées pour s'étendre (blogueur, personne), qui peut également réaliser un héritage complet!