You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Existen 3 funciones (call, apply & bind) que permiten manejar this en una función.
Call
call acepta como primer parámetro cual es el contexto de this dentro de la función.
El resto de los parámetros son pasados como parámetros individuales a la función.
functioncalcularPromedio(nota1,nota2){constpromedio=(nota1+nota2)/2;console.log(`El promedio de ${this.nombre} es ${promedio}`);}constalumno={nombre: "Martín",};calcularPromedio.call(alumno,10,6);
En este ejemplo vemos como this pasa a hacer referencia al objeto alumno.
Los otros dos parámetros de call pasan a ser nota1 y nota2.
Apply
bind funciona de una manera similar a call pero cambia la forma de pasar parámetros.
El primer parámetro sigue siendo el contexto que toma this.
el segundo parámetro es una colección que pasan como parametros.
functioncalcularPromedio(nota1,nota2){constpromedio=(nota1+nota2)/2;console.log(`El promedio de ${this.nombre} es ${promedio}`);}constalumno={nombre: "Martín",};constnotas=[10,6];calcularPromedio.apply(alumno,notas);
En este ejemplo creamos una colección (Array) de notas.
Pasamos como primer parámetro de bind el objeto alumno para que this haga referencia a ese objeto.
Como segundo parámetro pasamos la colección notas y cada valor de la colección se transforma en un parámetro de la función.
El primer item de la colección notas pasa a ser nota1 y el segundo pasa a ser nota2.
Podemos hacer una versión más dinámica.
functioncalcularPromedio(nota1, ...notas){constsumaDeNotas=(acumulador,nota)=>{returnacumulador+nota;};constpromedio=(nota1+notas.reduce(sumaDeNotas,0))/arguments.length;console.log(`El promedio de ${this.nombre} es ${promedio}`);}constalumno={nombre: "Martín",};constnotas=[10,6,8,7,9];calcularPromedio.apply(alumno,notas);
En este ejemplo agregamos más notas del alumno.
La función calcularPromedio recibe una nota como primer parámetro y luego utilizamos rest para obtener una colección con el resto de las notas.
Para calcular el promedio sumamos todas las notas de la colección notas usando reduce y luego le sumamos la primer nota que vino como primer parámetro.
Utilizando arguments.length para saber la cantidad de notas pasadas como parámetro.
this sigue siendo una referencia al objeto alumno.
Bind
bind funciona de una manera un poco diferente.
Esta función devuelve una función donde this está bindeado o relacionado con el contexto pasado como parámetro.
Dado que retorna una función nueva, tenemos que ejecutarla para que funcione.
functionsaludar(){console.log(this);}constalumno={nombre: "Martín",};// bind retorna una nueva función donde alumno es el contexto de thisconstnuevaFuncion=saludar.bind(alumno);// ejecutamos la función para ver quién es thisnuevaFuncion();// { nombre: 'Martín' }
Arrow Functions
Arrow functions no son un remplazo de las functions de JavaScript sino que son útiles en algunos casos.
Las arrow functions no tienen su propio this como las functions.
Toman el contexto de this heredandolo de su contexto.