Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

333
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda