Cada función contiene dos propiedades: longitud y prototipo
Longitud: el número de parámetros con nombre que la función actual quiere aceptar
Prototipo: es la forma real de preservar toda su fuerza
La copia del código es la siguiente:
función dice name (nombre) {
alerta (nombre);
}
función suma (num1, num2) {
return num1 + num2;
}
función sayshi () {
alerta ("hola");
}
alerta (sayname.length); // 1 número de parámetros
alerta (sum.length); // 2 Número de parámetros: 2
alerta (sayhi.length); // 0 sin parámetros
Cada función contiene dos métodos no heredados: aplicar () y llamar ()
Ambos métodos llaman a las funciones en un alcance específico, que en realidad es igual a establecer el valor de este objeto en el cuerpo de la función
Primero aplicar () acepta dos parámetros: uno es el alcance de la función que se ejecuta, y el otro es la matriz de parámetros (puede ser una instancia de matriz o un objeto de argumento)
La copia del código es la siguiente:
función suma (num1, num2) {
return num1 + num2;
}
function llamesum1 (num1, num2) {
return sum.apply (this, argumentos); // pasar en argumentos objeto
}
function llamesum2 (num1, num2) {
return sum.apply (this, [num1, num2]);
}
alerta (callum1 (10, 10)); // 20
alerta (callum2 (10, 20)); // 30
En segundo lugar, el primer parámetro del método de llamada no ha cambiado. Lo que cambia es que los otros parámetros se pasan por los parámetros, y los parámetros pasados a la función deben enumerarse uno por uno.
La copia del código es la siguiente:
función suma (num1, num2) {
return num1 + num2;
}
function llamesum (num1, num2) {
return sum.call (this, num1, num2);
}
alerta (llamadas (10, 200));
En cuanto a qué método es más conveniente, depende completamente de sus deseos. Si no hay parámetros, será lo mismo que usar.
Sin embargo, la aparición de los métodos de aplicación y llamadas no es definitivamente sobre cómo eliminar los parámetros del casco.
Su uso real radica en el alcance del que dependen las funciones de extensión.
La copia del código es la siguiente:
window.color = "rojo";
var o = {color: "azul"};
función sayscolor () {
alerta (this.color);
}
sayColor (); // rojo
saycolor.call (esto); // rojo
saycolor.call (ventana); // rojo
saycolor.call (o); // azul
La mayor ventaja de usar aplicar y llamar para expandir el alcance es que no hay necesidad de tener ninguna relación de acoplamiento con el método.
ECMAScript5 también define un método: bind (). Este método crea una instancia de una función cuyo valor estará vinculado al valor pasado a la función de enlace
La copia del código es la siguiente:
window.color = "rojo";
var o = {color: "azul"};
función sayscolor () {
alerta (this.color);
}
var bindfun = saycolor.bind (o);
bindfun (); // azul
Lo anterior se trata de este artículo, espero que te pueda gustar.