1. Modelo de fábrica
função pessoa (nome, idade) {var p = new Object (); p.name = nome; P.age = idade; p.showMessage = function () {console.log ("nome:"+this.name+"idade:"+this.age); } retornar p;} var p1 = pessoa ("k1", 28); var p2 = pessoa ("k2", 29); console.log (p1.showMessage == p2.showMessage); // false não é o mesmo método de showmessage console.log (p1.crição);O defeito do padrão de fábrica é que o problema do reconhecimento de objetos não é resolvido e o método ShowMessage de cada objeto não é o mesmo método (cada método é recriado em cada instância do objeto), o que aumenta a sobrecarga
2. Modo construtor
função pessoa (nome, idade) {this.name = name; this.age = idade; this.showMessage = function () {console.log ("nome:"+this.name+"idade:"+this.age); }} var p1 = nova pessoa ("k1", 28); var p2 = nova pessoa ("k2", 29); console.log (p1.showMessage == p2.showMessage); // false não o mesmo método de showmessage Console.Log (P1.Constructor);O padrão do construtor resolve o problema do reconhecimento de objetos, mas o método ShowMessage de cada objeto não é o mesmo método (cada método é recriado em cada instância do objeto), o que aumenta a sobrecarga
3. Modo de protótipo
function pessoa () {} pessoa.prototype.name = "k"; pessoa.prototype.age = 29; PERSON.Prototype.ShowMessage = function () {console.log ("Nome:"+this.name+"idade:"+this.age);}; var p1 = new pessoa (); Pessoa (); p2.ShowMessage (); // Nome: K Idade: 29console.log (P1.ShowMessage == P2.ShowMessage); // true -a referência é a mesma função console.log (P1. Instância) // [Person] --Object Console.Log (P1 Instância) console.log (Person.prototype.isprototypeof (p1)); // trueconsole.log (object.getPrototypeof (p1) == Person.prototype); // trueO padrão de protótipo resolve o problema de "cada método é recriado em cada instância do objeto" e também resolve o problema do reconhecimento de objetos.
Um grande problema com o modo de protótipo é que todos os objetos, variáveis e funções montados no protótipo da função são compartilhados por todas as instâncias da função. Embora as propriedades do protótipo possam ser acessadas através das instâncias P1 e P2, o valor da propriedade não pode ser modificado. Por exemplo, p1.name = "K1", ele adiciona apenas uma propriedade de nome = "k1" na instância P1 e não muda para prototype.name. Tudo bem se for um tipo de valor, mas se for um tipo de referência, haverá problemas. Veja o seguinte exemplo
function pessoa () {}; pessoa.prototype.age = 10; Pessoa.Prototype.array = [1,2,3]; var p1 = new Person (); var p2 = new Person (); Console.log (P1.array); // [1,2,3] Console.Log (P2.Aray); //−1,2,3 ]p1.array.push(4) ;console.log(p1.array) ;///[1,2,3,4]P1 agrega um valor à matriz, que também se reflete em P2 porque todos apontam para a mesma matriz
4. Combinando o modo construtor e o modo de protótipo
Esta é a maneira mais comum de criar objetos, combinando as vantagens dos construtores e padrões de protótipo
função pessoa (nome, idade) {this.name = name; this.age = idade;} pessoa.prototype.showMessage = function () {console.log ("nome:"+this.name+"idade:"+this.age);}; var p1 = nova pessoa ("k", 30); p1.showmessage ();5. Modo de protótipo dinâmico
A solução principal é: encapsular todas as informações no construtor, o que está mais alinhado com a idéia de oo
função pessoa (nome, idade) {this.name = name; this.age = idade; if (type of this.showMessage! = "function") {Person.prototype.showMessage = function () {console.log ("nome:"+this.name+"idade:" this.age); }}} var p1 = new Pessoa ("K", 30); p1.ShowMessage ();6. Padrão de construtor parasitário
função pessoa (nome, idade) {var o = new Object (); o.name = nome; o.age = idade; O.SayName = function () {console.log (this.name); }; retornar o;} var p1 = new Pessoa ("K", 28); p1.SayName ();O padrão de construtor parasitário é exatamente o mesmo que o padrão de fábrica, exceto que a nova palavra -chave é usada ao criar o objeto. O exemplo acima: var p1 = nova pessoa ("K", 28).
Sua principal função é: expandir as funções neste construtor. Por exemplo, quero definir um tipo de matriz MyArray, que é baseado em uma matriz e tem seu próprio método, como segue
function myarray () {var valores = new Array (); valores.push.apply (valores, argumentos); // o método definido por você valual.topipedstring = function () {return this.join ('|'); }; Valores de retorno;} var colors = new MyArray ("vermelho", "azul", "verde"); console.log (colors.topipedstring ()); console.log (colors instayof);7. Modo de construtor estável
O construtor seguro segue o padrão do tipo de construtor parasitário, mas há duas diferenças: uma não deve usar isso, e a outra não deve usar o novo para chamar o construtor.
função pessoa (nome, idade) {var o = new Object (); VAR tempestuoso = idade; o.name = nome; o.age = idade; O.SayName = function () {console.log (nome); } o.sayage = function () {console.log (tempage); } retornar o;} var p1 = pessoa ("k1", 28); p1.sayName (); // k1p1.sayage (); // 28p1.name = "k2"; p1.age = 30; p1.SayName (); // k1p1.sayage (); // 28Quando você vê a saída acima, pode entender o que é um padrão de objeto seguro. É um objeto criado usando este modo. Não há outra maneira de alterar o valor passado durante a inicialização. Esta é a pessoa ("K1", 28). Esse objeto é um objeto seguro. De fato, é um fechamento de JavaScript.
A breve análise acima do método de criação de um objeto JavaScript é todo o conteúdo que compartilho com você. Espero que você possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.