O JS é uma linguagem baseada em objetos que pode simular idiomas orientados a objetos, como Java | C ++ usando idéias orientadas a objetos.
• Orientado pelo processo
◦ Siga as etapas para resolver o problema
• Orientado a objetos
◦ Foco nos objetos (conteúdo e funções) necessários para resolver o problema e, em seguida, chamar métodos relevantes de acordo com certas regras de acordo com a lógica de negócios.
Os objetos são divididos em objetos do sistema e objetos personalizados. Podemos criar objetos do sistema chamando o construtor do sistema, como a matriz | data, etc. Objetos personalizados devem ser criados por si mesmos e não podem ser criados usando funções do sistema.
JavaScript Criar objeto
1. Crie diretamente
// Crie diretamente // js Crie um objeto // 1: Crie um objeto vazio var person1 = new Object (); // 2: adicione as propriedades e métodos necessários do objeto em pessoa1.name = "Ailer"; console .Log (Person1.name); PERSON1.GENDER = "MACHO"; // 3: Método adicionado a este objeto | (função) Person1. gerente = function () {console .log ("ailer é meu nome em inglês"); } // 4: Chamne o método do objeto: objeto. nome do método (); Person1.Manager (); // função | método? Quando uma função pertence a um objeto, a função pertence ao método sob esse objeto; A função é chamada através do nome do método; // variável | atributo? Quando uma variável pertence a um determinado objeto, a variável é o método neste objeto. Chamada variáveis por nomes de atributos. // aumenta a pessoa1.age = "6"; // altere PERSON1.NAME = "Lemon"; // Verifique o console .Log (Person1.Name); // excluir Person1.age; console .Log (Person1.age); ==> Tipo de referência indefinido //, endereço do armazenamento // Tipo básico: Bit do sinalizador de valor do armazenamento/* var Arr1 = [1,2,3,4] var Arr2 = [5, 6, 7,9]; var Arr2 = arr1; // arr2 [0] = 10; // altere o valor no ARR2, ARR1 também altera o alerta (arr1 [0]); // ===> 10 Tipo de referência*/var Per2 = new Object (); per2.name = "relia"; per2.age = "18"; per2.gender = "femal"; per2.hobby = "limões"; // 1: Acesso Propriedades através. (Sintaxe do Point) // 2: Acesse as propriedades do objeto através de [] (colchetes quadrados); Os suportes quadrados devem ser strings ou variáveis de atributo que salvam a string de atributo | Use colchetes quadrados var n = "name" //console.log(per2["name"); para (propriedade var em per2) {// console.log (per2 [propriedade]); }Embora intuitivo, o código é redundante ao criar vários objetos
2. Crie usando funções (modo de fábrica)
Para resolver o problema de várias declarações de objetos semelhantes, podemos usar um método chamado padrão de fábrica, que é resolver o problema de instantar objetos com um grande número de duplicações.
// Defina a função do construtor CreatePerson (nome, idade) {// Crie um novo objeto vazio var pessoa = new Object; // Adicione attribute | método Person.name = name; pessoa.age = idade; pessoa. gerente = function () {console .log ("ai"); } // pessoa devolver de retorno; } var per1 = createPerson ("Aier", 12); console .log (per1.name); var per2 = createPerson ("limão", 23); console .log (per2.age); console.log (pere2 instância de objeto); // true console.log (pere2 instância de createPerson); // false // não pode distinguir o tipo de objeto console.log (per2.Manager == Per1.Manager); // Falso pode ser obtido que o PER1 e o PER2 aberto e fechado são respectivamente, respectivamente, respectivamenteExcelente: criação em massa de instâncias semelhantes
Falta: a instância usa atributos semelhantes, fazendo com que o desperdício de memória seja público e o tipo de objeto não pode ser distinguido.
3. Criação literal
Excelente: simples e direto
Falta: Incapaz de construir objetos semelhantes em lotes
// O objeto criado pelos literais não aponta para a instância, mas para objeto // criar var per1 = {nome: "Ailer", construtor: per1, idade: 12, sexo: "feminino", hobby: "play", comer: function () {console.log (this.name); }} per1.eat (); // ailer per1.name = "limão"; per1.eat (); // limão console.log (typeof per1); // objeto console.log (per1.constructor == objeto); // true4. Novo+construtor
// Construtor cria um objeto e seus objetos infantis não são reconhecidos por exemplo. Todos criados com novos objetos+obj // são reconhecidos, mas alguma área de código ainda é desperdiçada; ==> Produza Criação de protótipo // Crie JS Objeto Novo+Construtor // 1: Criar Construtor | Geralmente, a primeira letra é a função capitalizada CreatePerson (Nome, Age) {// 2: Afixo os atributos | Método do objeto neste ponteiro. Quando a função é chamada para criar um objeto, este ponteiro aponta para esse novo objeto; // Isso é adicionado a este objeto this.name = name; this.age = idade; /*this.speak = function () {// aqui isso também aponta para o objeto de criação console.log (this.name+"hello"); }} /* Createperson.prototype.gender = "20"; CreatePerson.prototype. ea = function () {console .log (this.name+ "sfd"); }*/// __Proto__: IS: o atributo de protótipo no objeto Instância, apontando para o objeto protótipo correspondente ao construtor correspondente // [[protótipo]] // chamada var per1 = new CreatePerson ("Ailer", "20"); var per2 = new CreatePerson ("Relia", "18"); console .log (pere1 instância do createSerson); // == TRUE CONSOLE .LOG (PER2 Instância do createPerson); // ==> Console True .Log (per1.speak == Per2.Speak); // == FALSE significa que o sistema abriu duas áreas de código diferentes, causando resíduos de memória.É mais conveniente criar um literal, por isso gera um construtor, um construtor normal (padrão de fábrica) e a instância do sub-objeto de não é reconhecida e a memória é desperdiçada. Use o novo construtor+, e o sub-objeto é reconhecido, mas algum código ainda é duplicado, a memória é desperdiçada e o código do protótipo é gerado para resolvê-lo.
5. Modo de protótipo
função createanimal (nome, idade) {//1.2: ligue os parâmetros externos ao atributo da instância this.name = name; this.age = idade; } //1.3 Ligue o mesmo atributo no protótipo (atributo protótipo, método do protótipo) createanimal.prototype.gender = "masculino"; Createanimal.prototype.style = function () {console.log (this.name + "Ailers"); }; // 2: ligue para o construtor para criar um objeto var cat1 = new createanimal ("xiaohua", "2"); var cat2 = new createanimal ("xiaohua", "2"); cat1.style (); console.log(cat1.style==cat2.style);//The method references the same address, put the attribute in the prototype object to save the address//instanceof can determine which object belongs to [function] //Constructor builder can also use it to determine which object belongs to [constructor] [constant] //The instance object saves a constructor attribute pointing to its constructor function//instanceof and constructor. A diferença entre o console.log (instância cat1 de createanimal); // true console.log (cat1 institutaof object); // true console.log (instância cat1 de objeto); // console true.log (cat1.constructor == Createanimal); // console.Log (cat1.Constructor == Object); // == FALSE // O protótipo do construtor também possui um atributo construtor que se refere ao Console da função do construtor.log (createanimal.prototype.constructor == Createanimal); // true // em determina se a propriedade existe nesse objeto. Este atributo é um atributo de instância ou protótipo // alert ("nome" em cat1) // true // alert ("gênero" em cat1); // true // hasownProperty: para determinar se uma determinada propriedade é um atributo de instância ou herdado do atributo do protótipo, se for verdade, não existe | não retorna falsa; console.log (cat1.HasownProperty ("aaa")); // FALSO A propriedade inexistente retorna False Console.log (cat1.HasownProperty ("nome"); // True Property Console.Log (Cat1.HasownProperty ("o estilo); //, //Peaty Foundys Returns Returns Returnos Classe de ferramenta de propriedade do protótipo Console.log (isPrototype ("gênero", cat1)); // função true isprototype (prostring, obj) {if (prostring em obj) {if (! obj.HasownProperty (prostring)) {return true; } else {return false; }} else {return false; }}/*função isProperty (object, propriedade) {// julga se existe uma propriedade no protótipo retornar! Object.HasownProperty (Propriedade) && (propriedade no objeto);}*/Modo de protótipo dinâmico
// Inicialize a função de protótipo por (nome, idade, sexo) {this.name = name; this.age = idade; this.gnder = gênero; // execute apenas uma vez ao inicializar o protótipo se (typeof this.sayName! = "Function") {Person.prototype.sayName = function () {alert (this.name); }}}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.