Vamos resolver o encapsulamento e a herança em JS orientado a objetos.
1. Embalagem
Existem muitos métodos de implementação para encapsulamento no JS e aqui estão alguns usados.
1.1 Objeto de geração de padrões originais
Escreva nossos membros diretamente no objeto e devolva -os com uma função. Desvantagens: é difícil ver que é um exemplo de padrão.
Código:
A cópia do código é a seguinte:
função stu (nome, pontuação) {
retornar {
Nome: Nome,
Pontuação: Pontuação
}
}
var stu1 = Stu ("Zhang San", 80);
var stu2 = stu ("li si", 90);
console.log (stu1.name); // Zhang San
1.2 Gere objetos de padrão construído
O JS nos ajuda a fornecer um padrão para gerar objetos usando construtores. O chamado "construtor" é na verdade uma função comum, mas essa variável é usada internamente. Quando a nova palavra -chave é usada para gerar uma instância do construtor, essa variável estará vinculada ao objeto de instância.
Faça o upload diretamente do código:
A cópia do código é a seguinte:
função stu (nome, pontuação) {
this.name = nome,
this.score = pontuação
}
var stu1 = novo Stu ("Zhang San", 80);
var stu2 = novo Stu ("Li si", 90);
console.log (stu1.name + "/" + stu2.score); // Zhang San90
console.log ((stu1.constructor == stu) + "/" + (stu2.constructor == stu)); // true true
console.log ((STU1 Instância de Stu) + "/" + (STU2 Instância de Stu)); // true true
Não é difícil ver que o construtor JS gera objetos e C# com a classe gera objetos. Ambos usam modelos para definir os membros do objeto instanciá -los através de novas palavras -chave.
Gerar o mesmo objeto STU usando o código C#
A cópia do código é a seguinte:
Classe Stu
{
Nome de String Public;
pontuação dupla pública;
}
Ok, aqui está o objeto básico. Então agora precisamos de um método em que todos os objetos sejam comuns e só temos esse método criado uma vez. (Não crie repetidamente com o objeto novo) O que devo fazer? Todo mundo sabe que em C# podemos usar membros estáticos. Então, como fazer isso no JS?
1.3 Modo de protótipo
No JS, cada construtor possui um atributo de protótipo e todas as propriedades e métodos desse objeto serão herdados pela instância do construtor. Em seguida, adicionar membros ao protótipo diretamente é equivalente a declarar um membro estático em C#.
Código:
A cópia do código é a seguinte:
função stu (nome, pontuação) {
this.name = nome,
this.score = pontuação
}
Stu.prototype.type = 'aluno';
Stu.prototype.log = função (s) {
console.log (s);
}
var stu1 = novo Stu ("Zhang San", 80);
var stu2 = novo Stu ("Li si", 90);
console.log (stu1.type + "/" + stu2.type); // alunos
Stu1.log ('Hello'); // olá
console.log (stu1.log == stu2.log); // verdadeiro
Isso se trata de encapsulamento. Vamos dar uma olhada em como a herança é implementada no JS?
2. Herança
2.1 Ligação do construtor
Ligue ou aplique métodos diretamente na função filho para vincular o construtor do objeto pai ao objeto filho.
A cópia do código é a seguinte:
função stu (nome, pontuação) {
Grade.Apply (isto, argumentos);
//Grade.call( este, argumentos);
this.name = nome,
this.score = pontuação
}
função grau () {
this.code = "Junior High School";
this.ask = function () {
console.log ("Olá a todos");
}
}
var stu1 = novo Stu ("Zhang San", 80);
var stu2 = novo Stu ("Li si", 90);
console.log (stu1.code); // Junior High School
stu1.ask (); // Olá pessoal
Aplicar faz duas coisas aqui, coloque o primeiro parâmetro no construtor (chamador) e execute o código no grau. É equivalente a executar os membros definidos na série com isso em Stu novamente.
2.2 Herança através do protótipo
Veja o código primeiro
Código:
A cópia do código é a seguinte:
função stu (nome, pontuação) {
this.name = nome,
this.score = pontuação
}
função grau () {
this.code = "Junior High School";
}
Stu.prototype = novo grau ();
Stu.prototype.constructor = stu; // impedir o distúrbio da cadeia de herança e redefinir manualmente a declaração
var stu1 = novo Stu ("Zhang San", 80);
var stu2 = novo Stu ("Li si", 90);
console.log (stu.prototype.constructor); // Construtor próprio
console.log (stu1.code); // Junior High School
Como mencionado anteriormente, o protótipo é equivalente aos membros estáticos do C#, por isso transformamos todos os membros da classe dos pais em seus próprios membros estáticos para alcançar a herança.
Há uma desvantagem de herdar através do protótipo: todos os membros herdados são estáticos, então como herdar membros do objeto?
2.3 Herança de cópia
Copie todas as propriedades e métodos do objeto pai no objeto filho para realizar a herança.
Código:
A cópia do código é a seguinte:
função stu (nome, pontuação) {
this.name = nome,
this.score = pontuação
}
função grau () {}
GRADE.PROTOTYPE.CODE = "Junior High School";
}
// encapsulamento da função
função estend (c, p) {
var p = p.prototipo;
var c = c.prototipo;
para (var i em p) {
c [i] = p [i];
}
}
estender (Stu, grau);
var stu1 = novo Stu ("Zhang San", 80);
var stu2 = novo Stu ("Li si", 90);
stu1.code = 'ensino médio';
console.log (stu1.code); // Ensino médio
console.log (stu2.code); // Junior High School
console.log (stu.prototype.constructor);
console.log (grave.prototype.constructor)
Foi o que escrevi sobre a organização orientada a objetos JS. Essa coisa não é estática. Ao usá -lo, faça alterações de acordo com suas necessidades. Há um ditado que vai muito bem, o certo é o melhor.
Isso é analisado apenas para encapsulamento e herança. Faremos alguns outros artigos no futuro para permitir que os amigos tenham uma compreensão mais profunda da programação orientada a objetos JavaScript. Claro, tudo é um entendimento pessoal. Se houver omissões, entre em contato comigo.