es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El método call() en el primer ejemplo se utiliza para establecer explícitamente el valor de this al invocar una función. En este caso, se está estableciendo el valor de this en la función fullName() a myObject, por lo que la función fullName() devuelve el nombre completo de myObject en lugar de person.

    En el segundo ejemplo, el parámetro context se utiliza para establecer el valor de this dentro de la función iteratee. La función iteratee es una función de devolución de llamada que se llamará para cada elemento en la collection. El parámetro context te permite pasar un valor específico de this a la función iteratee.

    Por ejemplo, si se establece context como myObject, cada vez que se llama a la función iteratee, el valor de this dentro de la función iteratee 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 de this dentro de la función iteratee, lo cual puede ser útil para métodos que dependen de un contexto específico.

Comments are closed.