Sabemos que no JS, não há conceito de classe. Todos os objetos de instância de uma classe herdam atributos do mesmo objeto de protótipo, de modo que o objeto de protótipo é o núcleo da classe.
Uma classe é uma abstração de um objeto e um objeto é uma instância concreta de uma classe. As aulas são abstratas e não ocupam memória, enquanto os objetos são concretos e ocupam o espaço de armazenamento. --- Enciclopédia Baidu
Os requisitos iniciais do JavaScript eram muito simples, basicamente escritos como funções, seguidos pela escrita orientada para o processo. Posteriormente, as idéias de desenvolvimento orientadas a objetos foram gradualmente introduzidas e depois foram lentamente escritas em aulas.
No JS, a essência de escrever em uma classe é basicamente o protótipo de construtor +. Abaixo, vamos discutir várias maneiras de escrever a classe JS:
Método construtor
/*** Classe Pessoa: Defina uma pessoa, com atributo de nome e método getName*/<cript> function pessoa (nome) {this.name = name; this.getName = function () {return this.name; }} // instanciamos vários objetos aqui var p1 = new Pessoa ("trigkit4"); var p2 = nova pessoa ("Mike"); console.log (P1 Instância de pessoa); // True Console.log (P2 Instância de pessoa); // True </sCript>A partir da saída do console acima, podemos ver que P1 e P2 são de fato objetos de instância da classe de pessoa. No lado esquerdo da instância do operador está o objeto da classe a ser detectado e, no lado direito, está o construtor da classe que define a classe. Aqui, a Instância é usada para detectar se o objeto P1 pertence à classe de pessoa.
A vantagem desse método é que podemos construir diferentes instâncias de objetos de acordo com os parâmetros. A desvantagem é que cada vez que construímos o objeto de instância, o método GetName será gerado, resultando em resíduos de memória.
Podemos usar uma função externa em vez de métodos de classe, para que cada objeto compartilhe o mesmo método. A classe reescrita é a seguinte:
// função externa <Cript> function getName () {return this.name; } função pessoa (nome) {this.name = name; this.getName = getName; //} </script>Método do protótipo
<Cript> function Person () {}; Pessoa.prototype.name = "trigkit4"; // As propriedades da classe são colocadas no protótipo pessoa.prototype.getName = function () {return "eu sou" + this.name; } var p1 = new Person (); var p2 = nova pessoa (); console.log (p1.name); // trigkit4 console.log (p2.getName ()); // eu sou trigkit4 </sCript>A desvantagem do método do protótipo é que a instância do objeto não pode ser construída através de parâmetros (geralmente as propriedades de cada objeto são diferentes). A vantagem é que todas as instâncias de objetos compartilham o método getName (em relação ao método do construtor) e não há desperdício de memória.
Construtor + protótipo
Tire as vantagens dos dois primeiros:
um. Use o construtor para definir atributos de classe (campos).
b. Use o protótipo para definir o método de classe.
<Cript> função pessoa (nome) {this.name = name; } // O recurso do protótipo permite que as instâncias do objeto compartilhem o método getName PERS.Prototype.getName = function () {return "I'm" + this.name; } </script>Dessa maneira, podemos construir objetos com diferentes atributos e deixar que as instâncias de objetos compartilhem métodos sem causar resíduos de memória.
Para tornar o código JS mais compacto, movemos o código do método do protótipo para o aparelho de função.
<Cript> função pessoa (nome) {this.name = name; PERSON.PROTOTYPE.GETNAME = function () {Return name; // this.name não é adequado}} var p1 = new Person ('trigkit4'); console.log (p1.getName ()); // trigkit4 </sCript>Aqui, precisamos conhecer vários métodos para definir classes, além do construtor acima, também existem:
Método object.Create ()
Com esse método, uma "classe" é um objeto, não uma função.
var pessoa = {name: "trigkit4", idade: 21, run: function () {alert ("eu gosto de executar"); }}Em seguida, use object.create () diretamente para gerar uma instância sem usar o novo.
var p1 = object.create (pessoa); alerta (p1.age); // 21 p1.run (); // eu gosto de correr
Esse método é mais simples que o "método do construtor", mas não pode implementar atributos privados e métodos privados, e os dados não podem ser compartilhados entre objetos de instância; portanto, a simulação de "classes" não é abrangente o suficiente.
Método createnew ()
Este método não requer isso e protótipo. É para usar objetos para simular uma classe, definir um construtor createnew () na classe e, em seguida, definir um objeto de instância em createnew () e usar esse objeto de instância como o valor de retorno.
<SCRIPT> var pessoa = {createnew: function () {var pessoa = {}; pessoa.name = "trigkit4"; pessoa.run = function () {alert ("eu gosto de correr"); }; pessoa de volta; }} </script>Ao usá -lo, ligue para o método createnew () para obter o objeto de instância.
var P1 = Pessoa.CreateNew (); p1.run (); // eu gosto de correr
Este método de escrita é realmente muito semelhante ao método de escrita dos literais de objetos, exceto que um é separado por vírgula e o outro é separado por ponto de vírgula.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.