Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

330
Vistas
¿Por qué no puedo usar getElementById como devolución de llamada a Array#map?

Para asignar una matriz de números en cadena a Números reales, simplemente puedo pasar la función Número:

 let arr = ["0", "1", "-2.5"]; console.log(arr.map(Number));

Ahora me gustaría usar el mismo enfoque con document.getElementById para asignar una lista de cadenas de id a sus nodos DOM correspondientes:

 let arr = ["a", "b"]; console.log(arr.map(document.getElementById));
 <div id="a">a <span id="b">b</span></div>

que me da

 "TypeError: 'getElementById' called on an object that does not implement interface Document."

¿Alguien puede explicar el error?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Puede encontrar una explicación de lo que está sucediendo aquí :

Cuando se lanza este error, se llama a una función (en un objeto dado) con un this que no corresponde al tipo esperado por la función.

Este problema puede surgir cuando se usan los métodos Function.prototype.call() o Function.prototype.apply() y se proporciona un argumento this que no tiene el tipo esperado.

Este problema también puede ocurrir cuando se proporciona una función que se almacena como una propiedad de un objeto como argumento para otra función . En este caso, el objeto que almacena la función no será el destino de this función cuando sea llamado por la otra función. Para solucionar este problema, deberá proporcionar un lambda que realiza la llamada o usar la Function.prototype.bind() para forzar this argumento al objeto esperado.

También agrego mi solución alternativa: hay una sobrecarga del map de métodos que le permite establecer el contexto en el segundo parámetro :

 let arr = ["a", "b"]; console.log(arr.map(document.getElementById, document));
 <div id="a">a <span id="b">b</span></div>

about 4 years ago · Juan Pablo Isaza Denunciar

0

Experimentando, parece estar relacionado con this que ya no apunta al contexto correcto (que sería document ) al pasar document.getElementById como una devolución de llamada al map , por lo que pasar explícitamente un getElementById enlazado hace el truco:

 let arr = ["a", "b"]; console.log(arr.map(document.getElementById.bind(document)));
 <div id="a">a <span id="b">b</span></div>

Desafortunadamente, esto también anula el propósito del enfoque, que sería la concisión, ya que esto se puede acortar de

 arr.map(document.getElementById.bind(document)) // to arr.map(id=>document.getElementById(id))
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda