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

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

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 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