Dans les projets réels, nous utilisons généralement un constructeur pour créer un objet, puis ajoutons des méthodes courantes à son objet prototype. Enfin, instanciez l'objet directement ou utilisez-le comme classe parent, déclarez un objet et héritez de la classe parent.
Il existe deux méthodes couramment utilisées lors de l'héritage. Aujourd'hui, nous allons en discuter un peu
//Classe parent
function Personne(nom){
this.name = nom;
};
// Sous-classe
function Student(sex){
Person.apply(this,arguments); //Hériter du constructeur de la classe parent
this.sex=sex;
};
1, hériter du Prototype :
Étudiant .prototype = Person.prototype; //Lorsque cette phrase est exécutée, Student.prototype.constructor pointe vers Person Pourquoi ? Parce que Person.prototype.constructor pointe vers Person, l'affectation d'objet est essentiellement une affectation de référence, donc Student.prototype.constructor pointe également vers Person
Student.prototype.constructor = Student; // Pointez Student.prototype.constructor vers Person
Utilisez l'objet prototype de la personne pour écraser l'objet prototype de l'étudiant ; comme mentionné précédemment, l'affectation d'un objet est essentiellement une affectation de référence, donc si des modifications sur Student.prototype seront reflétées dans Person.prototype, c'est-à-dire que les sous-classes affectent le parent. cours.
Regardez ci-dessous :
Student.prototype.add=function() {alert( "add")};
Person.prototype.add();//Pop up add
2. Instance héritée :
Étudiant .prototype = new Person(); //Si aucun paramètre n'est transmis ici, vous n'avez pas besoin d'écrire (); c'est-à-dire d'écrire directement new Person;
2 Student.prototype.constructor = Student;
Utiliser l'instance Person pour écraser l'objet prototype de Student ; créer une instance est un gaspillage de mémoire par rapport à la précédente, mais cela résout également les défauts de la méthode ci-dessus, c'est-à-dire toute modification sur Student. prototype ne sera pas reflété pour le moment dans Person.prototype, c'est-à-dire que la sous-classe n'affectera pas la classe parent.
3. Utilisez des objets de contrôle pour combiner les avantages de 1 et 2 et supprimer les inconvénients
var F = function(){};
F.prototype = Person.prototype;
Student.prototype = new F();
Student.prototype.constructor = Student;
F est un objet vide, avec seules certaines méthodes prototypes , occupent moins de mémoire lors de l'instanciation et isolent également l'impact de la sous-classe sur la classe parent.