В предыдущей статье я написал инструментальную функцию $class, а в этой статье я улучшу ее следующим образом. Реализуйте следующие функции
1. Наследование
2. Когда подкласс наследует родительский класс, он не наследует частные атрибуты родительского класса.
Скопируйте код кода следующим образом:
/**
* @param {String} имя класса
* @param {String/Function} superCls
* @param {Function} classImp
*/
функция $class(className, superCls, classImp){
если (superCls === '') superCls = Object;
функцияclazz(){
if(typeof this.init == "функция"){
this.init.apply(это, аргументы);
}
}
вар р = clazz.prototype = новый superCls();
вар _super = superCls.prototype;
окно [имя класса] = clazz;
classImp.apply(p, [_super]);
}
Сначала напишите родительский класс
Скопируйте код кода следующим образом:
/**
* Родительский класс Person
*/
$class('Человек','',функция(){
//Возраст частного атрибута
вар возраст;
this.init = функция (n, а) {
//Имя публичного атрибута
это.имя = п;
// Инициализация частного свойства
возраст = а;
};
this.getName = функция(){
вернуть это.имя;
};
this.setName = функция(имя){
это.имя = имя;
}
this.getAge = функция(){
возвратный возраст;
};
this.setAge = функция(а){
возраст = а;
};
});
Написать подкласс, наследовать от Person
Скопируйте код кода следующим образом:
$class("Человек",Человек, функция(выше){
вар школа;
this.init = функция(n, a, s){
supr.init.apply(this, [n,a]);
школа = с;
}
this.getSchool = функция(){
вернуться в школу;
};
this.setSchool = функция(и){
школа = с;
};
});
новый экземпляр подкласса
Скопируйте код кода следующим образом:
вар м = новый Человек('том', 25, 'пку');
console.log(m.name); // Том наследует имя общего атрибута родительского класса и может напрямую использовать оператор точки для его получения.
console.log(m.age); // не определено Возраст частного свойства родительского класса не может быть получен напрямую с помощью оператора точки.
console.log(m.getAge()); // 25 Приватный атрибут age можно получить с помощью общедоступного метода getAge родительского класса.
console.log(m.school); // неопределенные личные свойства человека по-прежнему невозможно получить с помощью оператора точки
console.log(m.getSchool()); // pku получает частный атрибут school с помощью метода getSchool();