La manière d’écrire des classes en JavaScript a déjà été évoquée. Mais les implémentations privées ne sont pas discutées. Lisez cet article.
Nous savons que l'essence de la mise en œuvre des propriétés privées dans JS est var + fermeture. comme suit
Copiez le code comme suit :
fonction Personne(n, a){
// publique
this.name = n;
// privé
var âge = a;
this.getName = fonction(){
renvoie this.name ;
}
this.getAge = fonction(){
âge de retour;
}
}
Le test est le suivant. L'âge est privé et ne peut pas être obtenu à l'aide de l'opérateur point. Au lieu de cela, la méthode getName ne peut être utilisée.
Copiez le code comme suit :
var p = new Person('jack',23);
console.log(p.age); // non défini
console.log(p.getAge()); // 23
Il n’y a rien de surprenant à ce qui précède, utilisons une fonction outil pour l’implémenter ci-dessous.
Copiez le code comme suit :
/**
* @param {String} nom de classe
* @param {Fonction} classImp
*/
fonction $class(className, classImp){
fonctionclazz(){
if(typeof this.init == "function"){
this.init.apply(this, arguments);
}
}
classImp.call(clazz.prototype);
window[className] = clazz;
}
écrire un cours
Copiez le code comme suit :
$class('Personne', fonction(){
// Les propriétés privées sont définies ici
var âge = '';
this.init = fonction(n, a){
//Les propriétés partagées y sont accrochées et initialisées.
this.name = n;
// Initialisation de la propriété privée
âge = un ;
} ;
this.getName = fonction(){
renvoie this.name ;
} ;
this.getAge = fonction(){
âge de retour;
}
});
nouveau un objet d'instance
Copiez le code comme suit :
var p = new Person('jack',23);
console.log(p.name); // Commun à jack, vous pouvez utiliser l'opérateur point pour l'obtenir
console.log(p.age); // le privé non défini ne peut pas être obtenu via l'opérateur point
console.log(p.getAge()); // 23 L'âge privé ne peut être obtenu que via la méthode publique getAge