En ECMAScript V3, estos dos métodos se definen para el prototipo de función. Las funciones de estos dos métodos son las mismas: usar estos dos métodos pueden llamar a funciones como llamar a otros métodos de objetos. Esta oración fue copiada del libro, al menos no entendí lo que esto significa.
Hablemos de simple y fácil de entender. Primero veamos el código:
La copia del código es la siguiente:
Introducción de función (nombre, edad)
{
document.write ("mi nombre es"+nombre+". Soy"+edad);
}
var p = nuevas personas ();
Introducción.call (P, "Wainking", 20);
Hablemos del código anterior. Después de usar llamadas, la introducción se convierte en el método de p. Me pregunto si entiendes esto? Usando el método de llamada, el código anterior es equivalente a este código:
La copia del código es la siguiente:
Función de personas (nombre, edad)
{
this.name = name;
this.age = edad;
this.IntroDuce = function () {
document.write ("mi nombre es"+nombre+". Soy"+edad);
};
}
¿Entiendes el significado? Aplicar la misma función.
Ok, no importa cuál sea este método en la práctica, hablemos primero de la gramática.
La llamada acepta al menos un parámetro. El primer parámetro de la llamada se refiere al objeto que necesita. Por ejemplo, en el ejemplo anterior, el método de introducción espera que pueda llamarse por el objeto P, por lo que P se usa como el primer parámetro de la llamada. El número restante de parámetros es arbitrario, y se utiliza como un parámetro del método de introducción. El orden está en el orden declarado por el parámetro de introducción. Por ejemplo, introducir. CALL (P, "KINKING", 20), si Introducto es un método de ejemplo de P, entonces esto es lo que significa: P.introduce ("Knainking", 20). ¿Lo entiendes? Recuerde que el orden de los parámetros entrantes debe ser consistente con el orden de los parámetros de declaración de función.
Después de comprender la llamada, el método de aplicación es fácil de entender. La única diferencia entre aplicar y llamar es que la llamada acepta al menos un parámetro, mientras que la aplicación solo acepta dos parámetros. El primer parámetro es el mismo que la llamada, y el segundo parámetro es un conjunto con subíndices. Por ejemplo, la introducción. Call (p, "Wainking", 20) se puede reescribir en introducción. Aplicación (P, ["KINKING", 20]). ¿Entiendes esta vez?
Entonces, ¿cuáles son los usos de estos dos métodos? Si solo queremos implementar la función anterior, ¿no es mejor implementar la introducción como personas?
Resumen la aplicación en dos:
1. Método de intercambio. Veamos primero el código:
La copia del código es la siguiente:
Introducción de función (nombre, edad)
{
document.write ("mi nombre es"+nombre+". Soy"+edad);
}
Este es un método de autointroducción. Ahora digamos que tenemos una clase de niño y una clase de niña (solo estoy para la demostración aquí, en la práctica, se utilizará una clase de padres del pueblo), porque su introducción es la misma, por lo que podemos compartir este método.
La copia del código es la siguiente:
Función Boy ()
{
this.boyinTroDuce = function () {
Introduction.call (este, nombre, edad);
};
}
Del mismo modo, lo mismo es cierto en Girl, por lo que podemos evitar escribir código. En realidad, esto es un poco descabellado, porque podemos escribirlo como:
La copia del código es la siguiente:
Función Boy ()
{
this.boyinTroDuce = function () {
Introducción (nombre, edad);
}
}
Pero en este momento, si usamos aplicar, se verá mucho más simple:
La copia del código es la siguiente:
Función Boy ()
{
this.boyinTroDuce = function () {
Introduction.apply (esto, argumentos);
};
}
¿No es mucho más simple? Si hay muchos parámetros, ¡no necesite escribir una serie de parámetros densos!
2. Llamada de dominio cruzado
Vea un ejemplo simple (solo para demostración, sin valor):
La copia del código es la siguiente:
Function Boy (nombre, edad)
{
this.boyinTroDuce = function () {
document.write ("mi nombre es"+nombre+". Soy"+edad);
}
}
Function Girl (nombre, edad)
{
}
Esta es una clase de niño y niña, y luego escribimos el siguiente código:
var b = chico nuevo ("sinuoso", 20);
B.BoyTroDuce ();
No hay objeción a esto. Supongamos que hay una chica que quiere presentarse algún día y simplemente usarla por casualidad, entonces no es necesario que modifique la clase de niñas, porque otras chicas son tímidas y no les gusta presentarse. Entonces puedo hacer esto en este momento.
var g = nueva chica ("xuan", 22);
Introduction.call (g, "Xuan", 22);
3. Uso real - herencia
De acuerdo, lo anterior son todos pequeños trucos, y no es un lugar de elegancia. A continuación se muestra la llamada y la aplicación más utilizada, que se utiliza para la herencia estructural.