Durante o processo de desenvolvimento, muitas vezes encontramos a necessidade de criar muitos objetos semelhantes, que podem ter muitas propriedades ou métodos idênticos. Então, quais são os métodos para criarmos vários objetos? Qual é o melhor método? Vamos dar uma olhada juntos!
O método literal de um objeto é uma das formas mais comuns de criar objetos. As propriedades dos objetos criados no método literal são graváveis, enumeráveis e configuráveis por padrão.
O código a seguir mostra como criar vários objetos usando métodos literais:
//Criar vários objetos usando métodos literais var person1 = { nome: 'geléia', idade: 18, endereço: 'Cidade de Xangai', comendo: função () { console.log(este.nome + 'Comer') } } var pessoa2 = { nome: 'tom', idade: 20, endereço: 'Cidade de Pequim', comendo: função () { console.log(este.nome + 'Comer') } } var pessoa3 = { nome: 'calagem', idade: 19, endereço: 'cidade de Tianjin', comendo: função () { console.log(este.nome + 'Comer') } }
经过上述示例代码我们可以看出,仅仅创建了3个对象就用了24行,可以看出字面量方式的弊端:创建同样的对象时,需要编写重复的代码太多。
O padrão de fábrica é na verdade um padrão de design comum;
Normalmente teremos um método de fábrica através do qual podemos gerar os objetos desejados;
o código a seguir mostra a operação de usar o método de modo de fábrica para criar vários objetos:
//Cria vários objetos usando a função de fábrica function createPerson (nome, idade, endereço). ) { var p = {} p.nome = nome p.idade = idade p.endereço = endereço p.comer = função () { console.log(nome + 'Comer') } retornar p } var p1 = createPerson('jam', 19, 'Cidade de Xangai') var p2 = createPerson('tom', 14, 'Pequim') var p3 = createPerson('li', 13, 'Tianjin City') p3.eating() // Quando li está comendo,
可以看出使用工厂模式方法创建了三个对象使用的代码明显比字面量少了好多行,but这就是最好的方式了吗?NO! NO! NO!
工厂模式方法的**弊端**就在于:以上述示例代码为例。当我们打印p1,p2,p3后,获取不到对象最真实的类型,比如p1是人还是动物还是工具
Construtor Acredito que todos estão familiarizados
.isto. A chamada função construtora é uma função que fornece um modelo para gerar um objeto e descreve a estrutura básica do objeto. Um construtor pode gerar vários objetos, cada um com a mesma estrutura.
O código a seguir mostra o uso do método construtor para criar vários objetos:
// Especificação convencional, a primeira letra do nome do construtor é maiúscula function Person (name, age, address) { este.nome = nome esta.idade = idade este.endereço = endereço isto.comer=função(){ console.log(este.nome + 'Comer') } this.running=função(){ console.log(este.nome + 'em execução') } } var p1 = new Pessoa('jam', 20, 'Pequim') var p2 = new Pessoa('tom', 14, 'Cidade de Xangai') var p3 = nova Pessoa('li', 13, 'Cidade de Tianjin') console.log(p1) // Resultados de saída // Pessoa { // nome: 'jam', // idade: 20, // endereço: 'Pequim', // comendo: [Função], // executando: [Função] // } p1.eating() // Jam
构造函数有个不成文的规范,那就是构造函数的名字首字母大写或者驼峰。
构造函数方式并不是最完美的创建多个对象的方式,也是有缺点的。
缺点:每个方法都要在每个实例上重新创建一遍,比如同样的eating方法和running方法都需要在p1,p2,p3的实例上去创建一遍,浪费很多的内存空间
é definir atributos de instância no construtor, então apenas esses parâmetros precisam ser passados ao criar o objeto. O objeto protótipo é usado para definir métodos e propriedades compartilhadas.
O código a seguir mostra como criar vários objetos usando protótipos e construtores:
function Person (name, age, address) { este.nome = nome esta.idade = idade este.endereço = endereço isto.comer = this.running=função(){ console.log(este.nome + 'em execução') } } // Adicione o método eating e o método running ao protótipo, para que você não precise adicionar o mesmo método na memória toda vez que criar um objeto Person.prototype.eating = function () {. console.log(este.nome + 'Comer') } Pessoa.prototype.running=função(){ console.log(este.nome + 'em execução') } var p1 = new Pessoa('jam', 20, 'Pequim') var p2 = new Pessoa('tom', 14, 'Cidade de Xangai') var p3 = nova Pessoa('li', 13, 'Cidade de Tianjin') console.log(p1) //Resultado de saída: // Pessoa { // nome: 'jam', // idade: 20, // endereço: 'Pequim', // comendo: [Função], // executando: [Função] // } p1.eating() //
最后的当然是压轴的呀,这种原型和构造函数方式是目前在ECMAScript中使用得最广泛、认同度最高的一种创建对象的方法。
Depois de ler isso, você acha que criar vários objetos não é tão complicado? Você pode criá-los em minutos usando o método de protótipo e construtor?