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

190
Vistas
Cómo envolver y llamar correctamente a una función en un objeto

Después de muchas horas buscando una explicación y fallando, lo pregunto aquí.

Todo el código aquí son ejemplos hechos de lo que estaba trabajando.

Primer enfoque

objeto sencillo:

 let obj = { fun: window.getComputedStyle, ele: $('#myDiv')[0] };

Al intentar la siguiente llamada de función:

 obj.fun(obj.ele);

Da el siguiente error:

 Uncaught TypeError: 'getComputedStyle' called on an object that does not implement interface Window.

Estoy usando jQuery para recuperar el elemento JS, pero usar document.getElementById produciría el mismo resultado.

Segundo enfoque

Busqué durante un tiempo sobre diferentes tipos de objetos y encontré este estilo:

 let obj = { fun: function() {return window.getComputedStyle}, ele: $('#myDiv')[0] };

Pero este tipo debe llamarse de otra manera:

 obj.fun()(obj.ele);

Este enfoque funciona correctamente.

Pregunta

Obviamente, la versión ampliada del código funciona según lo previsto:

 window.getComputedStyle($('#myDiv')[0]);

El código anterior devuelve el objeto completo correctamente.


Entonces mis preguntas son:

  • ¿Por qué falla el primer enfoque (que tiene más sentido para mí)?
  • ¿Hay alguna forma de corregir el primer enfoque, de modo que pueda usar el primer tipo de llamada de función?
  • ¿No se supone que se debe hacer este tipo de ajuste de función?

¡Gracias!

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

0

Cuando llama al método obj.fun() , está llamando a getComputedStyle con el alcance obj (this value) y no con el alcance global (this/window/globalThis).


Hay varias formas de corregir este comportamiento particular:

Primera solución

Puede hacer uso de una función, como las funciones de flecha y definir fun-property siguiente manera:

 fun: (e) => window.getComputedStyle(e)

Vea un fragmento de trabajo a continuación:

 let obj = { fun: (e) => window.getComputedStyle(e), ele: $('#myDiv')[0] }; console.log(obj.fun(obj.ele));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="myDiv"></div>

Segunda solución

Puede hacer uso de Function.prototype.bind para acceder al contexto correcto en la invocación de la función usando este código:

 fun: window.getComputedStyle.bind(this)

Ver un fragmento de trabajo:

 let obj = { fun: window.getComputedStyle.bind(this), ele: $('#myDiv')[0] }; console.log(obj.fun(obj.ele));
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div id="myDiv"></div>

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