Função: Prototype
Cada construtor possui uma propriedade chamada protótipo (protótipo, não mais traduzida abaixo, use seu texto original). Esta propriedade é muito útil: declare variáveis ou funções comuns para uma classe específica.
Definição de protótipo
Você não precisa declarar explicitamente uma propriedade de protótipo, porque ela existe em todos os construtores. Você pode dar uma olhada no exemplo a seguir:
Exemplo Pt1
A cópia do código é a seguinte:
teste de função ()
{
}
alerta (test.prototype); // Saída "Objeto"
Adicionar propriedades ao protótipo
Como você pode ver acima, o protótipo é um objeto, para que você possa adicionar propriedades. O atributo que você adicionar ao protótipo se tornará um atributo comum para o objeto criado usando este construtor.
Por exemplo, eu tenho um peixe do tipo dados abaixo e quero que todos os peixes tenham essas propriedades: vidasin = "água" e preço = 20; Para conseguir isso, posso adicionar essas propriedades ao protótipo do peixe construtor.
Exemplo pt2
A cópia do código é a seguinte:
função peixe (nome, cor)
{
this.name = nome;
this.color = cor;
}
Fish.Prototype.Livesin = "Water";
Fish.Prototype.price = 20;
Em seguida, vamos fazer alguns peixes:
A cópia do código é a seguinte:
var fish1 = novo peixe ("mackarel", "cinza");
var fish2 = novo peixe ("peixe dourado", "laranja");
var fish3 = novo peixe ("salmão", "branco");
Vamos dar uma olhada em quais propriedades são peixes:
A cópia do código é a seguinte:
para (int i = 1; i <= 3; i ++)
{
var fish = avaliação ("peixe"+i); // eu apenas pego o ponteiro para este peixe
alerta (fish.name+","+fish.color+","+fish.livesin+","+peixe.price);
}
A saída deve ser:
A cópia do código é a seguinte:
"Mackarel, cinza, água, 20"
"Goldfish, laranja, água, 20"
"Salmão, água branca, 20"
Você vê que todos os peixes têm atributos de vida e preço, e nem sequer declaramos especificamente esses atributos para cada peixe diferente. No momento, quando um objeto é criado, o construtor atribuirá seu protótipo de atributo ao atributo interno do novo objeto __proto__. Este __proto__ é usado por esse objeto para encontrar suas propriedades.
Você também pode usar o protótipo para adicionar funções comuns a todos os objetos. Isso tem uma vantagem: você não precisa criar e inicializar essa função sempre que construir um objeto. Para explicar isso, vejamos o exemplo DT9 novamente e reescrevê -lo usando o protótipo:
Use o protótipo para adicionar funções aos objetos
Exemplo pt3
A cópia do código é a seguinte:
funcionário da função (nome, salário)
{
this.name = nome;
this.salary = salário;
}
Employee.prototype.getSalary = função getSalaryFunction ()
{
retornar este.Salary;
}
Funcionário.prototype.addsalary = função addSalaryFunction (adição)
{
this.salary = this.salary+adição;
}
Podemos criar objetos como normalmente fazemos:
A cópia do código é a seguinte:
var Boss1 = New Funcionário ("Joan", 200000);
Var Boss2 = novo funcionário ("Kim", 100000);
var Boss3 = New Funcionário ("SAM", 150000);
E verifique:
A cópia do código é a seguinte:
alert (Boss1.getSalary ()); // saída 200000
alert (BOIF2.getSalary ()); // Saída 100000
alerta (Boss3.getSalary ()); // Saída 150000
Aqui está um diagrama para ilustrar como o protótipo funciona. Cada instância desse objeto (Boss1, BOSS2, BOSS3) possui uma propriedade interna chamada __proto__, que aponta para o protótipo de propriedade de seu construtor (funcionário). Quando você executa o GetSalary ou o ADDSALARY, esse objeto encontrará e executa esse código em seu __proto__. Observe isso: não há cópia do código aqui (compare -o com o exemplo do gráfico DT8).