A maneira de escrever classes em JavaScript já foi discutida antes. Mas as implementações privadas não são discutidas. Leia este artigo.
Sabemos que a essência da implementação das propriedades privadas em JS é var + encerramento. do seguinte modo
Copie o código do código da seguinte forma:
função Pessoa(n, a){
// público
este.nome = n;
//privado
var idade = a;
this.getNome=função(){
retorne este.nome;
}
this.getAge = function(){
idade de retorno;
}
}
O teste é o seguinte. A idade é privada e não pode ser obtida usando o operador ponto. Em vez disso, o método getName só pode ser usado.
Copie o código do código da seguinte forma:
var p = new Pessoa('jack',23);
console.log(p.age);
console.log(p.getAge());
Não há nada de surpreendente no que foi dito acima, vamos usar uma função de ferramenta para implementá-lo abaixo.
Copie o código do código da seguinte forma:
/**
* @param {String} nomedaclasse
* @param {Função} classImp
*/
função $class(className, classImp){
functionclazz(){
if(typeof this.init == "função"){
this.init.apply(isto, argumentos);
}
}
classImp.call(clazz.prototype);
janela[nomedaclasse] = clazz;
}
escrever uma aula
Copie o código do código da seguinte forma:
$class('Pessoa', function(){
//As propriedades privadas são definidas aqui
var idade = '';
this.init = função(n, a){
//As propriedades compartilhadas são penduradas e inicializadas.
este.nome = n;
// Inicialização de propriedade privada
idade = uma;
};
this.getNome=função(){
retorne este.nome;
};
this.getAge = function(){
idade de retorno;
}
});
novo um objeto de instância
Copie o código do código da seguinte forma:
var p = new Pessoa('jack',23);
console.log(p.name); // Comum ao jack, você pode usar o operador ponto para obtê-lo
console.log(p.age); // private indefinido não pode ser obtido através do operador ponto
console.log(p.getAge()); // 23 A idade privada só pode ser obtida através do método público getAge