Función: prototipo
Cada constructor tiene una propiedad llamada prototipo (prototipo, ya no se traduce a continuación, use su texto original). Esta propiedad es muy útil: declare variables o funciones comunes para una clase específica.
Definición de prototipo
No necesita declarar explícitamente una propiedad prototipo, ya que existe en cada constructor. Puede echar un vistazo al siguiente ejemplo:
Ejemplo PT1
La copia del código es la siguiente:
Test de funciones ()
{
}
alerta (test.prototype); // Salida "Objeto"
Agregar propiedades al prototipo
Como puede ver anteriormente, el prototipo es un objeto, por lo que puede agregarle propiedades. El atributo que agregue al prototipo se convertirá en un atributo común para el objeto creado usando este constructor.
Por ejemplo, tengo un pescado de tipo de datos a continuación, y quiero que todos los peces tengan estas propiedades: vidas = "agua" y precio = 20; Para lograr esto, puedo agregar esas propiedades al prototipo del pez constructor.
Ejemplo PT2
La copia del código es la siguiente:
Function Fish (nombre, color)
{
this.name = name;
this.color = color;
}
Pesc.prototype.livesin = "agua";
Pesc.prototype.price = 20;
A continuación, hagamos algunos peces:
La copia del código es la siguiente:
var fish1 = nuevo pez ("mackarel", "gris");
var pez2 = pez nuevo ("pez dorado", "naranja");
var pez3 = pez nuevo ("salmón", "blanco");
Echemos un vistazo a qué propiedades son peces:
La copia del código es la siguiente:
para (int i = 1; i <= 3; i ++)
{
var pesh = eval_r ("pez"+i); // Solo obtengo el puntero a este pez
alerta (pez.name+","+fish.color+","+fish.livesin+","+fish.price);
}
La salida debe ser:
La copia del código es la siguiente:
"Mackarel, gris, agua, 20"
"Goldfish, naranja, agua, 20"
"Salmón, aguas blancas, 20"
Usted ve que todos los peces tienen atributos vidas y precios, y ni siquiera declaramos específicamente estos atributos para cada pez diferente. En este momento, cuando se crea un objeto, el constructor asignará su prototipo de atributo al atributo interno del nuevo objeto __proto__. Este __proto__ es utilizado por este objeto para encontrar sus propiedades.
También puede usar un prototipo para agregar funciones comunes a todos los objetos. Esto tiene una ventaja: no necesita crear e inicializar esta función cada vez que construye un objeto. Para explicar esto, veamos el ejemplo DT9 nuevamente y reescribamos con prototipo:
Use prototipo para agregar funciones a los objetos
Ejemplo PT3
La copia del código es la siguiente:
Función Empleado (nombre, salario)
{
this.name = name;
this.salary = salario;
}
Empleado.prototype.getSalary = function getSalaryFunction ()
{
devolver esto. Salario;
}
Empleado.prototype.addsalary = function addsalaryfunction (adición)
{
this.salary = this.salary+adición;
}
Podemos crear objetos como lo hacemos normalmente:
La copia del código es la siguiente:
var boss1 = nuevo empleado ("Joan", 200000);
var boss2 = nuevo empleado ("Kim", 100000);
var boss3 = nuevo empleado ("Sam", 150000);
Y verificarlo:
La copia del código es la siguiente:
alerta (boss1.getSalary ()); // Salida 200000
alerta (boss2.getSalary ()); // Salida 100000
alerta (boss3.getSalary ()); // Salida 150000
Aquí hay un diagrama para ilustrar cómo funciona el prototipo. Cada instancia de este objeto (Boss1, Boss2, Boss3) tiene una propiedad interna llamada __proto__, que apunta al prototipo de propiedad de su constructor (empleado). Cuando ejecuta GetSalary o AddSalary, este objeto encontrará y ejecutará este código en su __proto__. Tenga en cuenta esto: no hay una copia del código aquí (compárelo con el gráfico DT8 de ejemplo).