Visão geral
Do que estamos falando quando estamos falando de programação orientada a objetos?
Primeiro, conversamos sobre alguns conceitos: objetos, classes, encapsulamento, herança, polimorfismo.
Objetos e classes são a base da orientação de objetos e o encapsulamento, herança e polimorfismo são as três principais características da programação orientada a objetos.
O JavaScript fornece objetos, mas não possui classes e não pode definir explicitamente uma classe como C#.
No entanto, as funções de função do JavaScript são muito flexíveis, uma das quais é o construtor, que pode implementar "classes" em combinação com construtores e objetos de protótipo.
Conceitos de objetos e classes
Objeto
"Objeto" é um conceito muito importante na programação orientada a objetos. Um objeto é uma descrição de uma "coisa" (alguém ou algo).
As pessoas e as coisas vêm da vida real, e nossa compreensão do mundo real é nossa compreensão das pessoas e das coisas.
No campo da programação, o código é abstrato para pessoas comuns, e a aplicação do código é resolver melhor os problemas do mundo real.
Durante as fases de análise e design, o conceito de "objeto" pode refletir melhor os problemas do mundo real.
Por outro lado, o código contém alguma lógica, que é usada para descrever o negócio. O negócio contém algum conhecimento comercial. O conhecimento dos negócios é resumido através da compreensão e análise do mundo real. Esses problemas são compostos de "objetos" no mundo real.
Os objetos contêm recursos e comportamentos. Em termos de OOP, os recursos são atributos de objetos e comportamentos são métodos de objetos.
tipo
No mundo real, objetos semelhantes podem ser agrupados de acordo com certos padrões. Por exemplo, "beija -flores" e "águias" são divididos em pássaros. Os pássaros não são objetos específicos. Eles são um conceito resumido por pessoas depois de analisar características e comportamentos semelhantes com base em aves específicas, como "beija -flores" e "águias". Uma classe é equivalente a um modelo e podemos criar objetos específicos diferentes com base nesse modelo.
Em C#, podemos definir um pássaro.
/// <summary> //// Birds /// </summary> public class Bird {public void Fly () {Console.WriteLine ("Eu posso voar!"); }}Embora o JavaScript seja uma linguagem de programação orientada a objetos, ele não fornece suporte de sintaxe para a classe.
No JavaScript, tudo é baseado em objetos. Até o "protótipo" sobre o qual falaremos mais tarde são objetos. A herança e a reutilização do JavaScript também são implementadas por protótipos.
No entanto, a combinação de construtores e objetos de protótipo pode implementar as "classes" do JavaScript.
Construtor
Anteriormente, usamos o novo Array () para criar uma matriz e usávamos o novo objeto () para criar um objeto. Array () e Object () são dois construtores embutidos em JavaScript. Embora o JavaScript não forneça classes, podemos entender a matriz e o objeto como o conceito de "classes".
Deve -se notar que a "classe" do JavaScript é implementada pelo construtor.
Defina o construtor
Os construtores também são funções e não há diferença de sintaxe entre definir construtores e outras funções.
A única diferença é que a primeira letra do construtor deve ser capitalizada, que também é a especificação de programação do JavaScript.
A seguir, define um construtor de pessoa (), que podemos entender como a classe de pessoa.
function Person () {console.log ('Eu sou KeepFool.');}A "classe" e o construtor de JavaScript são definidos ao mesmo tempo. Ao definir a "classe" em JavaScript, o construtor é definido ao mesmo tempo.
Usando construtores
O JavaScript usa classes da mesma maneira que C#, com a nova palavra -chave seguida pelo construtor.
var p = nova pessoa ();
Definir atributos e métodos
Agora que definimos a classe de pessoa, podemos adicionar algumas propriedades e métodos à classe da pessoa.
Definir atributos
Ao falar sobre objetos JavaScript, conversamos sobre a configuração da propriedade e o acesso dos objetos.
Este código mostra duas maneiras de definir propriedades do objeto:
var cat = {color: 'preto'}; cat.name = 'tom'; console.log (cat.color); console.log (cat.name);Use isso para definir atributos
O método de definição de atributo da classe JavaScript é um pouco diferente. Use esta palavra -chave para definir atributos no construtor:
função pessoa (nome) {this.name = name;}• A primeira linha de código define a classe de pessoa e define o construtor.
• A segunda linha de código define o atributo de nome.
Criar e usar objetos
As 2 linhas de código a seguir criam objetos de classe de duas pessoas
var p1 = nova pessoa ('James'); var p2 = nova pessoa ('cury');Saída P1.Name e P2.Name no Chrome Console
P1 e P2 são dois objetos diferentes, a modificação do P1.name não afetará o P2.Name.
p1.name = 'LeBron James';
Defina o método
Primeiro, vamos distinguir os termos "função" e "método". "Função" é uma unidade independente, enquanto o "método" depende da existência da classe como sujeito.
Use isso para definir métodos
No JavaScript, o método de classe é definir a função no construtor e usar essa palavra -chave para definir o método no construtor:
função pessoa (nome) {// define o atributo this.name = name; // define o método this.sayhello = function () {return 'hello, eu sou' + this.name;}}Como usar
Chame o método Sayhello () de objetos P1 e P2, respectivamente, no console do Chrome
atributo construtor
Quando um objeto é criado, uma propriedade especial é atribuída automaticamente ao objeto pelo JavaScript, e essa propriedade é a propriedade do construtor.
Digite p1.constructor no console do Chrome e você poderá ver que a propriedade do construtor do objeto P1 aponta para uma função.
Veja o conteúdo desta função, esse não é o construtor da pessoa ()?
Isso significa que também podemos criar objetos através da propriedade P1.Constructor,
var p3 = novo P1.Constructor ('Steve Nash');Esta linha de código explica uma frase: "Não me importo com o que o objeto P1 é criado, mas quero que outro objeto seja criado como P1!"
Usando a instância do operador no console do Chrome, você pode ver que P1, P2 e P3 são todos os casos de classe de pessoa
Além disso, quando criamos o objeto de maneira {} , o construtor object () é realmente chamado.
var o = {};Esta linha de código declara um objeto. Embora não definamos nenhuma propriedade e métodos, o mecanismo JavaScript define o atributo do construtor por padrão.
o.constructor aponta para o construtor Object (), [native code] mostra que o object () é uma função interna no JavaScript.
Objeto de protótipo
No JavaScript, ao definir uma função, a função terá um atributo de protótipo e o construtor não é exceção.
A figura a seguir mostra que a propriedade do protótipo do construtor PERSON () é um objeto, que pertence à função , e chamamos essa propriedade de objeto de protótipo.
Do ponto de vista da classe de pessoa, também podemos entender que o atributo protótipo pertence à classe da pessoa.
Ao mesmo tempo, a instância da classe Pessoa não possui um atributo de protótipo. O prototipo p1. na figura acima é indefinido, o que significa que o atributo do protótipo é compartilhado, o que é um pouco como o atributo estático em C#.
Definindo protótipo
Como o protótipo é um objeto, você pode adicionar propriedades e métodos.
Definir propriedades e métodos na propriedade Prototype de uma função não é diferente das propriedades e métodos de objetos comuns.
O código a seguir define propriedades e métodos para Pessoa.prototipo.
function pessoa (nome) {this.name = name; this.sayhello = function () {return 'hello, eu sou' + this.name;}} // define propriedades e métodos no protótipo do construtor. Pessoa ('James');Usando protótipo
As propriedades e métodos do protótipo definidos pessoalmente. O prototipo pode ser usado diretamente por instâncias de classe de pessoa e ainda são usados na forma de object.property .
Deve -se notar que name e sayHello() são casos pertencentes à classe de pessoa, enquanto height e run() são casos que não pertencem à classe da pessoa.
Dicas: você pode verificar se o objeto contém uma determinada propriedade ou método através do método HASOWNPROPERTY.
Atributos do protótipo
Uma instância da classe Pessoa pode usar as duas propriedades pessoalmente aula e as propriedades pessoalmente. Prototipo.
Então, qual é a diferença entre as propriedades da classe de pessoa e as propriedades do Pessoa.prototipo?
Primeiro, podemos entender as propriedades e métodos na classe de pessoa como "propriedades de instância".
Como o protótipo é compartilhado, podemos entender propriedades e métodos no protótipo como "propriedades compartilhadas".
A diferença entre "atributos de instância" e "atributos compartilhados" é refletida principalmente no desempenho.
Cada vez que uma instância de pessoa é criada, uma cópia do atributo de nome e o método Sayhello () serão gerados, e o método de atributo de altura e run () compartilharão uma cópia de todas as instâncias.
Sendo esse o caso, isso significa que o método Sayhello () pode ser mencionado no protótipo.
Além disso, a altura da instância de pessoa diferente pode ser diferente, por isso deve ser mais razoável colocá -la na classe de pessoa.
function pessoa (nome, altura) {this.name = nome; this.Height = altura;} pessoa.prototype.sayhello = function () {return 'hello, eu sou' + this.name + ', minha altura é' + this.Height + 'cm.'; Pessoa ('James', 203); var p2 = nova pessoa ('cury', 190);Resumo da implementação da classe
O JavaScript não tem classes, mas os construtores podem implementar "classes".
De acordo com as especificações de programação JavaScript, a primeira letra do construtor deve ser capitalizada.
As propriedades e métodos de "classe" são definidos no construtor neste método.Property.
Quando a criação de objetos é criada, o JavaScript atribui o atributo construtor ao objeto. O atributo construtor é uma referência à função do construtor de objeto.
A função já possui um atributo de protótipo quando é definido e o atributo de protótipo também é um objeto.
O protótipo é compartilhado e as propriedades e métodos definidos no protótipo podem ser usados por instâncias da "classe".
Se propriedades ou métodos puderem ser definidos no protótipo, não os definirá nos construtores. O uso do protótipo pode reduzir a sobrecarga da memória.
O artigo acima no JavaScript OOP - Detalhes da implementação da classe são todo o conteúdo que compartilhei com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.