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

234
Vistas
¿Cómo "agregar" una acción a una función?

Quería crear una función a la que pueda agregar acciones más adelante. Intenté esto:

 Function.prototype.appendAction = function(action) { let _ogFn = this return function(...args) { _ogFn(...args) action() } } function a() { console.log("foo") } a() a = a.appendAction(() => console.log("bar")) a()

Esto funciona , pero ¿cómo puedo hacer que cambie la función automáticamente? Quiero que funcione así:

 a() a.appendAction(() => console.log("bar")) //note it doesn't have the "a = " a() //changed function
about 4 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Dependiendo de su escenario, podría crear un decorador de funciones. Esto significaría definir una función (por ejemplo fnMod ) que acepte una función fn y devuelva una versión decorada que ejecute algunos ganchos antes y después .

 const a = fnMod(() => { console.log("foo"); }); a(); a.appendAction(() => console.log("bar")); a(); const john = { name: "John Doe", age: 42, greet: fnMod(function () { console.log(`I'm ${this.name}.`); // <- uses `this` so use a normal function }) } john.greet.prependAction((name) => { console.log(`Hi ${name}!`); // <- does not use `this` so both a normal function }); // or arrow function will work fine john.greet.appendAction(function () { console.log(`I'm ${this.age} years old.`); }); john.greet("Jane"); function fnMod(fn) { const before = []; const after = []; function hookable(...args) { before.forEach(fn => fn.apply(this, args)); const result = fn.apply(this, args); after.forEach(fn => fn.apply(this, args)); return result; }; hookable.prependAction = (fn) => { before.unshift(fn); } hookable.appendAction = (fn) => { after.push(fn); } return hookable; }

Es posible que desee modificarlo a su gusto. Actualmente, tanto this como todos los argumentos pasados a la función decorada se reenvían a todos los ganchos, lo que podría o no ser deseable.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Si solo quieres llamarlo inmediatamente:

 Function.prototype.appendAction = function(action) { let _ogFn = this return (function(...args) { _ogFn(...args) action() })() } function a() { console.log("foo") } a.appendAction(() => console.log("bar"))

Ese es el patrón de expresión de función inmediatamente invocada (IIFE)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Para sus propósitos, podría usar eval :

Primero, tome la entrada del usuario como sea que la esté manejando y analícela como una cadena.

Luego usa eval así:

 let userInput = 'console.log("hello world")'; const callUserFunction = (action) => { eval(`function fn(){${action}}`); fn(); } callUserFunction(userInput);

Tenga en cuenta que permitir que un usuario escriba o JS es un riesgo de seguridad, que puede abrir las puertas a todo tipo de ataques, por lo que en la mayoría de los escenarios, desaconsejaría hacerlo.

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