Im vorherigen Artikel habe ich eine Toolfunktion $class geschrieben, und dieser Artikel wird sie wie folgt verbessern. Implementieren Sie die folgenden Funktionen
1. Vererbung
2. Wenn eine Unterklasse von einer übergeordneten Klasse erbt, erbt sie nicht die privaten Attribute der übergeordneten Klasse.
Kopieren Sie den Codecode wie folgt:
/**
* @param {String} Klassenname
* @param {String/Function} superCls
* @param {Funktion} classImp
*/
Funktion $class(className, superCls, classImp){
if(superCls === '') superCls = Object;
functionclazz(){
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]);
}
Schreiben Sie zunächst eine übergeordnete Klasse
Kopieren Sie den Codecode wie folgt:
/**
* Person der übergeordneten Klasse
*/
$class('Person','',function(){
//Alter des privaten Attributs
var Alter;
this.init = function(n, a){
//Öffentlicher Attributname
this.name = n;
// Privateigentumsinitialisierung
Alter = a;
};
this.getName = function(){
return this.name;
};
this.setName = function(name){
this.name = Name;
}
this.getAge = function(){
Rückkehralter;
};
this.setAge = function(a){
Alter = a;
};
});
Schreiben Sie eine Unterklasse, erben Sie von Person
Kopieren Sie den Codecode wie folgt:
$class("Man",Person, function(supr){
Var-Schule;
this.init = function(n, a, s){
supr.init.apply(this, [n,a]);
Schule = s;
}
this.getSchool = function(){
Rückkehr zur Schule;
};
this.setSchool = Funktion(en){
Schule = s;
};
});
Neu eine Unterklasseninstanz
Kopieren Sie den Codecode wie folgt:
var m = new Man('tom', 25, 'pku');
console.log(m.name); // Tom erbt den gemeinsamen Attributnamen der übergeordneten Klasse und kann ihn direkt mit dem Punktoperator abrufen.
console.log(m.age); // undefiniert Das Alter der privaten Eigenschaft der übergeordneten Klasse kann nicht direkt mit dem Punktoperator ermittelt werden
console.log(m.getAge()); // 25 Das Alter des privaten Attributs kann über die öffentliche Methode getAge der übergeordneten Klasse abgerufen werden
console.log(m.school); // undefiniert Die eigenen privaten Eigenschaften des Menschen können immer noch nicht über den Punktoperator abgerufen werden
console.log(m.getSchool()); // pku erhält das private Attribut school über die Methode getSchool()