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

180
Vistas
¿Se puede llamar a un objeto de función de javascript?

¡Esto es raro! Estoy luchando mucho con el problema de que la trampa de aplicación del controlador de Proxy de javascript no hace que el Proxy en sí pase como argumento, solo la función desnuda. Pero necesito pasar algunos metadatos para usarlos para volver a ajustar los resultados de la función.

Entonces pensé que podría usar Object.create para hacer una especialización de la función a la que podría agregar información adicional. ¡Pero eso no funciona! ¡Y eso es sorprendente!

 function test() { return "hi!"; } test() // 'hi!' test1 = test // ƒ test() { return "hi!"; } test1() // 'hi!' test2 = Object.create(test) // Function {} test2() // Uncaught TypeError: test2 is not a function test3 = new Function([], "return 'lo!';") // ƒ anonymous() { return 'lo!'; } test3() // 'lo!' test2.prototype.constructor() // 'hi!' test3.prototype.constructor() // 'lo!' Object.getPrototypeOd(test2)() // 'hi!'

Así que supongo que podría ayudarme a evaluar una función si la desenvolviera de alguna manera:

 while(fn instanceof Function && typeof fn != 'function') fn = Object.getPrototypeOf(fn);

Pero eso no funciona si solo quiero llamarlo, es decir, hacer que mi función especial sea transparente para cualquier usuario intermedio.

Bien, aquí hay una solución alternativa, en lugar de usar Object.create (fn), puedo envolverlo:

 fn = function() { return fn.apply(this, arguments); }

ahora puedo pegar mis metadatos especiales a este fn y también puedo envolverlo en un Proxy.

Pero mi pregunta es: ¿cuál es el significado de Object.create (fn) si no obtiene una función invocable real?

about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

Respuesta corta: Function can be called; Object cannot be called.

Ver Función como herencia de Objeto. Las funciones son objeto pero los objetos no son función.

Mira esto:

 function test() { return "hi!"; } test() // 'hi!' typeof test // 'function' test instanceof Object // true test2 = Object.create(test) typeof test2 // 'object' test2 instanceof Object // true typeof test2.prototype.constructor // 'function' // something else that works sample1 = Object.create({test}) typeof sample1 // 'object' typeof sample1.test // 'function' sample1.test() // 'hi!'

Si insiste en hacer que un objeto sea invocable, tal vez su opción más cercana sea crear su propia clase que tenga un comportamiento de función. Hay algunas sugerencias aquí: ¿Puedes hacer que un objeto sea 'llamable'?

about 4 years ago · Santiago Gelvez 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