Llame aplicar y obligar. y cómo son diferentes.
Aprendamos a llamar y aplicar usando cualquier terminología diaria.
Tienes tres automóviles your_scooter , your_car and your_jet
que comienzan con el mismo mecanismo (método). Creamos un objeto automobile
con un método push_button_engineStart
.
var your_scooter, your_car, your_jet;
var automobile = {
push_button_engineStart: function (runtime){
console.log(this.name + "'s" + ' engine_started, buckle up for the ride for ' + runtime + " minutes");
}
}
Vamos a entender cuándo se utiliza llamar y aplicar. Supongamos que usted es un ingeniero y lo tiene your_scooter
, your_car
y your_jet
que no venía con un botón de arranque de botón y desea utilizar un tercero push_button_engineStart
.
Si ejecuta las siguientes líneas de código, darán un error. ¿POR QUÉ?
//your_scooter.push_button_engineStart();
//your_car.push_button_engineStart();
//your_jet.push_button_engineStart();
automobile.push_button_engineStart.apply(your_scooter,[20]);
automobile.push_button_engineStart.call(your_jet,10);
automobile.push_button_engineStart.call(your_car,40);
Por lo tanto, el ejemplo anterior le da a your_scooter, your_car, your_jet una característica del objeto del automóvil.
Vamos a profundizar
Aquí dividiremos la línea de código anterior.
automobile.push_button_engineStart
nos está ayudando a obtener el método utilizado.
Además, utilizamos apply o call utilizando la notación de puntos.
automobile.push_button_engineStart.apply()
Ahora aplique y llame a aceptar dos parámetros.
- contexto
- argumentos
Así que aquí establecemos el contexto en la línea final de código.
automobile.push_button_engineStart.apply(your_scooter,[20])
La diferencia entre call y apply es solo que apply acepta parámetros en forma de matriz, mientras que call simplemente puede aceptar una lista de argumentos separados por comas.
¿Qué es la función JS Bind?
Una función de vinculación es básicamente la que vincula el contexto de algo y luego lo almacena en una variable para su ejecución en una etapa posterior.
Hagamos que nuestro ejemplo anterior sea aún mejor. Anteriormente utilizamos un método que pertenece al objeto del automóvil y lo utilizamos para equipar your_car, your_jet and your_scooter
. Ahora imaginemos que queremos dar un separado por push_button_engineStart
separado para arrancar nuestros automóviles individualmente en cualquier etapa posterior de la ejecución que deseamos.
var scooty_engineStart = automobile.push_button_engineStart.bind(your_scooter);
var car_engineStart = automobile.push_button_engineStart.bind(your_car);
var jet_engineStart = automobile.push_button_engineStart.bind(your_jet);
setTimeout(scooty_engineStart,5000,30);
setTimeout(car_engineStart,10000,40);
setTimeout(jet_engineStart,15000,5);
todavía no satisfecho?
Dejémoslo claro como lágrima. Hora de experimentar. Volveremos a llamar y aplicar la aplicación de función e intentaremos almacenar el valor de la función como referencia.
El siguiente experimento falla porque invocar y aplicar se invoca de inmediato, por lo tanto, nunca llegamos a la etapa de almacenar una referencia en una variable que es donde la función de vinculación roba el espectáculo
var test_function = automobile.push_button_engineStart.apply(your_scooter);