¿Qué es el método call () y apply () en JavaScript?

Dado que no ha preguntado sobre la diferencia en la llamada y la solicitud explícitamente, intentaré explicar por qué estos métodos están disponibles en javascript

En Javascript, hay escenarios en los que necesitamos tomar prestados métodos. Considere este escenario:

var addSomething = {

num: 0,

addToIt: function (numToAdd) {

return numToAdd + this.num;

}

};

Ahora, cuando llame a addSomething.addToIt (10), dará como resultado 10 (ya que estamos agregando 0 solamente)

Ahora, supongamos que desea agregar un número, digamos 1, a su número, puede pedir prestado el método addToIt de addSomething .

var addTo8 = {num: 8}

si intenta addTo8.addToIt (1) → provocará un error, ya que no hay ningún método addToIt para addTo8

Pero, si intentas addSomething.addToIt.call (addTo8, 1); resultará en 9

Arriba, estamos llamando a un método que está disponible con addSomething, proporcionando addTo8 como parámetro para establecer esta en addToIt ( para que this.num resulte en 8 )

De la misma manera que podemos usar el método de aplicación , la diferencia es solo en argumentos.

Recuerda por esto:

Una aplicación – – matriz como argumentos

C all : argumentos separados por comas .

Entonces, para cambiar el contexto de esto , usamos el método call o apply.

Estos métodos están disponibles con todas las funciones JS. Se pueden invocar desde cualquier función. Su caso de uso más importante es cuando desea ejecutar su función JS con un alcance (este) de su propia elección.

La diferencia entre estas dos funciones está en la forma en que puede pasar el argumento.

aplicar (alcance, [argumentos]);

llamada (alcance, arg1, arg2, …);

Ahora tomemos un ejemplo:

var persona = {

nombre: ‘Invitado’,

saludar: función (honor) {

console.log (‘Hola’ + honor + this.name ); // esto se refiere al alcance de fn

}

}

person.greet (‘Sr.’); // SALIDA: Hola Sr. Invitado

person.greet.call ({nombre: ‘John Doe’}, ‘Sr.’); // SALIDA: Hola Sr. John Doe

person.greet.apply ({nombre: ‘John Doe’}, [‘Sr.’]); // SALIDA: Hola Sr. John Doe

Consulte la información detallada de MDN.

https://developer.mozilla.org/en