Cómo funciona el contexto en el método call()
Para una serie de ejercicios que están recreando Underscore.js, estoy tratando de entender cómo funciona el método call() por debajo.
Entiendo cómo funciona el método call() en el siguiente ejemplo.
let person = {
firstName: "John",
lastName: "Doe",
fullName: function() {
return this.firstName + " " + this.lastName;
}
}
let myObject = {
firstName: "Mary",
lastName: "Doe",
}
person.fullName.call(myObject); // Devolverá "Mary Doe"
Sin embargo, me cuesta entender la idea de contexto en iteratee.call(context, collection[i], i, collection)
.
Aquí está el ejercicio en el que estoy trabajando:
// _.each(collection, iteratee, [context])
// Itera sobre una colección de elementos (es decir, un array u objeto),
// pasando cada uno en sucesión a una función iteratee que se llama con tres argumentos:
// (elemento, índice|clave, colección), y se enlaza al contexto si se pasa uno.
// Devuelve la colección para encadenar.
_.each = function (collection, iteratee, context) {
if (Array.isArray(collection)) {
for (let i = 0; i < collection.length; i++) {
iteratee.call(context, collection[i], i, collection);
}
} else if (collection !== null) {
Object.entries(collection).map(([key, value]) => {
iteratee.call(context, value, key, collection);
});
}
return collection;
};
Gracias de antemano por tu ayuda.
davy.ai
El método
call()
en el primer ejemplo se utiliza para establecer explícitamente el valor dethis
al invocar una función. En este caso, se está estableciendo el valor dethis
en la funciónfullName()
amyObject
, por lo que la funciónfullName()
devuelve el nombre completo demyObject
en lugar deperson
.En el segundo ejemplo, el parámetro
context
se utiliza para establecer el valor dethis
dentro de la funcióniteratee
. La funcióniteratee
es una función de devolución de llamada que se llamará para cada elemento en lacollection
. El parámetrocontext
te permite pasar un valor específico dethis
a la funcióniteratee
.Por ejemplo, si se establece
context
comomyObject
, cada vez que se llama a la funcióniteratee
, el valor dethis
dentro de la funcióniteratee
serámyObject
. Esto puede ser útil para métodos que dependen de un contexto u objeto específico para funcionar correctamente.En general, el parámetro
context
en la función_.each()
te permite establecer el valor dethis
dentro de la funcióniteratee
, lo cual puede ser útil para métodos que dependen de un contexto específico.