Dans l'article précédent, j'ai écrit une fonction outil $class, et cet article l'améliorera comme suit. Implémentez les fonctions suivantes
1. Héritage
2. Lorsqu'une sous-classe hérite d'une classe parent, elle n'hérite pas des attributs privés de la classe parent.
Copiez le code comme suit :
/**
* @param {String} nom de classe
* @param {String/Function} superCls
* @param {Fonction} classImp
*/
fonction $class(className, superCls, classImp){
if(superCls === '') superCls = Objet;
fonctionclazz(){
if(typeof this.init == "function"){
this.init.apply(this, arguments);
}
}
var p = clazz.prototype = new superCls();
var _super = superCls.prototype;
window[className] = clazz;
classImp.apply(p, [_super]);
}
Écrivez d’abord une classe parent
Copiez le code comme suit :
/**
* Personne de classe parent
*/
$class('Personne','',fonction(){
//Âge de l'attribut privé
âge variable;
this.init = fonction(n, a){
//Nom de l'attribut public
this.name = n;
// Initialisation de la propriété privée
âge = un ;
} ;
this.getName = fonction(){
renvoie this.name ;
} ;
this.setName = fonction(nom){
this.name = nom ;
}
this.getAge = fonction(){
âge de retour;
} ;
this.setAge = fonction(a){
âge = un ;
} ;
});
Écrivez une sous-classe, héritez de Person
Copiez le code comme suit :
$class("Homme",Personne, fonction(supr){
école varoise ;
this.init = fonction(n, a, s){
supr.init.apply(this, [n,a]);
école = s;
}
this.getSchool = fonction(){
retourner à l'école;
} ;
this.setSchool = fonction(s){
école = s;
} ;
});
nouvelle instance de sous-classe
Copiez le code comme suit :
var m = new Man('tom', 25, 'pku');
console.log(m.name); // Tom hérite du nom d'attribut commun de la classe parent et peut directement utiliser l'opérateur point pour l'obtenir.
console.log(m.age); // non défini L'âge de la propriété privée de la classe parent ne peut pas être obtenu directement à l'aide de l'opérateur point
console.log(m.getAge()); // 25 L'âge de l'attribut privé peut être obtenu via la méthode publique getAge de la classe parent
console.log(m.school); // non défini Les propriétés privées de l'homme ne peuvent toujours pas être obtenues via l'opérateur point.
console.log(m.getSchool()); // pku obtient l'attribut privé school via la méthode getSchool()