No artigo anterior, escrevi uma função de ferramenta $class e este artigo irá melhorá-la da seguinte maneira. Implemente as seguintes funções
1. Herança
2. Quando uma subclasse herda de uma classe pai, ela não herda os atributos privados da classe pai.
Copie o código do código da seguinte forma:
/**
* @param {String} nomedaclasse
* @param {String/Função} superCls
* @param {Função} classImp
*/
função $class(className, superCls, classImp){
if(superCls === '') superCls = Object;
functionclazz(){
if(typeof this.init == "função"){
this.init.apply(isto, argumentos);
}
}
var p = clazz.prototype = new superCls();
var _super = superCls.prototype;
janela[nomedaclasse] = clazz;
classImp.apply(p, [_super]);
}
Primeiro escreva uma classe pai
Copie o código do código da seguinte forma:
/**
* Classe pai Pessoa
*/
$class('Pessoa','',function(){
//Idade do atributo privado
var idade;
this.init = função(n, a){
//Nome do atributo público
este.nome = n;
// Inicialização de propriedade privada
idade = uma;
};
this.getNome=função(){
retorne este.nome;
};
this.setName = função(nome){
este.nome = nome;
}
this.getAge = function(){
idade de retorno;
};
this.setAge = função(a){
idade = uma;
};
});
Escreva uma subclasse, herde de Person
Copie o código do código da seguinte forma:
$class("Homem",Pessoa, função(supr){
escola var;
this.init = função(n, a, s){
supr.init.apply(este, [n,a]);
escola =s;
}
this.getSchool=função(){
voltar à escola;
};
this.setSchool = função(ões){
escola =s;
};
});
new uma instância de subclasse
Copie o código do código da seguinte forma:
var m = new Man('tom', 25, 'pku');
console.log(m.name); // Tom herda o nome do atributo comum da classe pai e pode usar diretamente o operador ponto para obtê-lo.
console.log(m.age); // indefinido A idade da propriedade privada da classe pai não pode ser obtida diretamente usando o operador ponto
console.log(m.getAge()); // 25 O atributo privado age pode ser obtido através do método público getAge da classe pai
console.log(m.school); // indefinido As propriedades privadas do homem ainda não podem ser obtidas através do operador ponto
console.log(m.getSchool()); // pku obtém o atributo privado school através do método getSchool()