Os objetos são qualquer coisa que as pessoas desejam estudar, desde os números inteiros mais simples até aeronaves complexas, etc., que podem não apenas representar coisas concretas, mas também regras, planos ou eventos abstratos. -citado da Encyclopedia Baidu
A programação orientada a objetos é o modelo de programação mais popular no momento. Mas é frustrante que, como o JavaScript de front-end mais amplamente usado, não suporta orientação a objetos.
O JavaScript não possui caracteres de controle de acesso, não define a classe de palavra -chave, não suporta estender ou cólon herdados e não usa virtual para suportar funções virtuais. No entanto, o JavaScript é uma linguagem flexível. Vamos dar uma olhada em como o JavaScript sem a classe de palavra -chave implementa a definição da classe e cria objetos.
Defina a classe e crie o objeto de instância da classe
Em JavaScript, usamos a função para definir a classe, como segue:
A cópia do código é a seguinte:
forma de função ()
{
var x = 1;
var y = 2;
}
Você pode dizer, dúvida? Não é uma função definidora? É isso mesmo, esta é uma função definidora. Definimos uma função de forma e inicializamos x e y. No entanto, se você olhar de outra perspectiva, isso é para definir uma classe de forma, que contém duas propriedades x e y, e os valores iniciais são 1 e 2, respectivamente. No entanto, as palavras -chave que definimos a classe são a função e não a classe.
Em seguida, podemos criar um objeto Ashape da classe de forma, como segue:
A cópia do código é a seguinte:
var ashape = new Shape ();
Definir propriedades públicas e privadas
Criamos o objeto Ashape, mas quando tentamos acessar suas propriedades, recebemos um erro como este:
A cópia do código é a seguinte:
ashape.x = 1;
Isso mostra que as propriedades definidas com o VAR são privadas. Precisamos usar essa palavra -chave para definir atributos públicos.
A cópia do código é a seguinte:
forma de função ()
{
this.x = 1;
this.y = 2;
}
Dessa forma, podemos acessar propriedades de forma, como:
A cópia do código é a seguinte:
ashape.x = 2;
OK, podemos resumir do código acima: usando o VAR para definir o atributo privado da classe e usar isso para definir o atributo público da classe.
Definir métodos públicos e privados
No JavaScript, uma função é uma instância da classe de função e a função é indiretamente herdada do objeto, portanto, uma função também é um objeto. Portanto, podemos criar uma função usando o método de atribuição. Obviamente, também podemos atribuir uma função a uma variável de atributo da classe. Em seguida, essa variável de atributo pode ser chamada de método porque é uma função executável. O código é o seguinte:
A cópia do código é a seguinte:
forma de função ()
{
var x = 0;
var y = 1;
this.draw = function ()
{
//imprimir;
};
}
Definimos um empate no código acima e atribuímos uma função a ele. Abaixo, podemos chamar essa função através de Ashape, que é chamada de método público em OOP, como:
A cópia do código é a seguinte:
Ashape.Draw ();
Se definido com VAR, o desenho se tornará privado, que é chamado de método privado em OOP, como:
A cópia do código é a seguinte:
forma de função ()
{
var x = 0;
var y = 1;
var draw = function ()
{
//imprimir;
};
}
Dessa forma, você não pode usar ashape.draw para chamar essa função.
Construtor
O JavaScript não suporta OOP, então é claro que não há construtor. No entanto, podemos simular um construtor e fazer com que o objeto seja chamado automaticamente quando é criado. O código é o seguinte:
A cópia do código é a seguinte:
forma de função ()
{
var init = function ()
{
// Código do construtor
};
init ();
}
No final da forma, chamamos artificialmente a função init. Então, ao criar um objeto de forma, o init sempre será chamado automaticamente, o que pode simular nosso construtor.
Construtor com parâmetros
Como fazer o construtor tomar parâmetros? De fato, é muito simples. Basta escrever os parâmetros a serem transmitidos para a lista de parâmetros de função, como:
A cópia do código é a seguinte:
forma de função (ax, ay)
{
var x = 0;
var y = 0;
var init = function ()
{
//Construtor
x = ax;
y = ay;
};
init ();
}
Dessa forma, podemos criar o objeto como este:
A cópia do código é a seguinte:
var ashape = nova forma (0,1);
Propriedades estáticas e métodos estáticos
Como definir propriedades e métodos estáticos em JavaScript? Como mostrado abaixo:
A cópia do código é a seguinte:
forma de função (ax, ay)
{
var x = 0;
var y = 0;
var init = function ()
{
//Construtor
x = ax;
y = ay;
};
init ();
}
Shap.Count = 0; // Defina uma contagem de propriedades estáticas, que pertence à classe, não ao objeto.
Shape.staticmethod = function () {}; // define um método estático
Com propriedades e métodos estáticos, podemos acessá -lo com nomes de classe, como segue:
A cópia do código é a seguinte:
alerta (Ashape.count);
Ashape.staticmethod ();
Nota: As propriedades e métodos estáticos são públicos. Até agora, não sei como fazer propriedades e métodos estáticos privados ~
Acesse propriedades públicas e privadas desta classe em um método
Acessando suas próprias propriedades nos métodos de classe. Os métodos de acesso da JavaScript para propriedades públicas e privadas são diferentes. Consulte o seguinte código:
A cópia do código é a seguinte:
forma de função (ax, ay)
{
var x = 0;
var y = 0;
this.gx = 0;
this.gy = 0;
var init = function ()
{
x = ax; // Adicione atributos privados e escreva o nome da variável diretamente
y = ay;
this.gx = ax; // Para acessar atributos públicos, você precisa adicionar isso antes do nome da variável.
this.gy = ay;
};
init ();
}
Coisas para notar sobre isso
De acordo com a minha experiência, isso na classe nem sempre aponta para o nosso próprio objeto. O principal motivo é que o JavaScript não é uma linguagem OOP, e funções e classes são definidas por funções, o que, obviamente, causará alguns pequenos problemas.
A situação em que esse ponteiro aponta incorretamente está geralmente no processamento de eventos. Queremos que a função de membro de um determinado objeto responda a um evento. Quando o evento for acionado, o sistema chamará nossa função de membro. No entanto, o aprovado neste ponteiro não é mais nosso próprio objeto. Obviamente, será um erro chamar isso na função de membro no momento.
A solução é salvar isso em uma propriedade privada no início da classe de definição. Mais tarde, podemos usar essa propriedade em vez disso. Estou usando este ponteiro com este método é bastante seguro e sem preocupações ~
Vamos modificar o código para resolver esse problema. Ao comparar o código na Parte 6, você definitivamente entenderá:
A cópia do código é a seguinte:
forma de função (ax, ay)
{
var _This = this; // salve isso e use _, em vez disso no futuro, para que você não fique confuso com isso
var x = 0;
var y = 0;
_This.gx = 0;
_This.Gy = 0;
var init = function ()
{
x = ax; // Adicione atributos privados e escreva o nome da variável diretamente
y = ay;
_This.gx = ax; // Para acessar atributos públicos, você precisa adicioná -lo antes do nome da variável.
_This.Gy = AY;
};
init ();
}
Acima, conversamos sobre como definir classes no JavaScript, criar objetos de classe, criar propriedades e métodos públicos e privados, criar propriedades e métodos estáticos, simular construtores e discutir isso propenso a erros.
Isso se trata da implementação do OOP em JavaScript. O acima é o conteúdo mais prático. Geralmente, o JavaScript define classes e o uso do código acima para criar objetos é suficiente. Obviamente, você também pode usar Mootools ou protótipo para definir classes e criar objetos. Eu usei a estrutura Mootools e é muito bom. É mais perfeito para simulação de classe JavaScript e suporta herança de classe. Os leitores interessados podem experimentar. Obviamente, se você usar uma estrutura, precisará incluir arquivos de cabeçalho JS relevantes em sua página da web. Portanto, ainda espero que os leitores possam criar classes sem uma estrutura. Dessa forma, o código é mais eficiente e você também pode ver que não é problemático criar uma classe simples ~