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

297
Vistas
¿Cómo llamar a un método de clase estática de JavaScript cuando el nombre de la clase y el nombre del método son cadenas?

Supongamos que tengo el siguiente código de clase de JavaScript. (EDITAR: el código se ejecuta como un módulo ES6 que se importa utilizando la declaración de "importación" estándar de ES6. Por lo tanto, la siguiente clase está en un archivo independiente "C.js")

 export class C { static f() { console.log("hello world") } }

Ahora quiero importar el módulo e invocar el método Cf(), pero solo tengo el nombre del método como una cadena. Lo siguiente funciona bien:

 import {C} from "C.js" var methodName="f" C[methodName]()

Ahora supongamos que también tengo el nombre de la clase como una cadena de la siguiente manera:

 import {C} from "C.js" var className="C" var methodName="f" /* How do I invoke Cf() ? */

Cosas que he probado:

  • Usando window/self/globalThis, que NO funcionan:
 import {C} from "C.js" var className="C" var methodName="f" /* none of the below calls work */ window[className][methodName]() self[className][methodName]() globalThis[className][methodName]()

He intentado usar el constructor Function():

 import {C} from "C.js" var className="C" var methodName="f" /* the following does NOT work: */ var fn = new Function(className+"."+methodName+"()") fn()

El código anterior da un error de que "C" no está definida, cuando se ejecuta fn().

También intenté usar "eval ()", que sería mi última opción de todos modos, ya que realmente no necesito evaluar el código "arbitrario". Solo quiero ejecutar un método estático en una clase, cuyos nombres están en cadenas.

 import {C} from "C.js" var className="C" var methodName="f" var code = className + "." + methodName + "()" eval(code)

Lo anterior NO funciona en el navegador web Chrome como parte de una aplicación JavaScript ES6 moderna. El problema en el navegador web Chrome es que el "entorno" global utilizado dentro de "eval" NO ve la definición de clase "C".

Entonces, ¿cuál es la mejor manera de implementar esta simple llamada usando valores de cadena para el nombre de la clase y el nombre del método?

 import {C} from "C.js" var className="C" var methodName="f" /* now what? */
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Dado que la respuesta está enterrada en los comentarios de la pregunta, pensé que debería continuar y publicarla aquí como una respuesta real, para que los futuros espectadores puedan encontrar la respuesta fácilmente.

La respuesta es: en JavaScript, no es posible invocar un método en una clase que se cargó desde un módulo ES6, donde el nombre de la clase está en una cadena.

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