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

97
Visualizações
Trampa de proxy para una parte de funciones

Implementé un controlador de proxy para interceptar todas las funciones en una clase.

 class SBFinder { foo1({ name, id }) { console.log(name + id); } foo2({ name, id }) { console.log(id + name); } } const handler = { get(target, propKey, receiver) { const targetValue = Reflect.get(target, propKey, receiver); if (typeof targetValue === 'function') { return (...args) => { console.log('before'); const res = targetValue.apply(this, args); console.log('after'); return res; }; } return targetValue; }, }; const finderProxy = new Proxy(new SBFinder(), handler); finderProxy.foo1({ name: 'name1', id: 223 });

Ahora quiero que el controlador se aplique solo a una parte de las funciones. Entiendo que es bastante fácil de implementar de acuerdo con el nombre de una función, la cantidad de argumentos, etc. Pero no quiero limitar al usuario por convenciones de nomenclatura. ¿Hay alguna forma de hacerlo, por ejemplo, de acuerdo con alguna etiqueta JSDocs (como hacemos con las anotaciones en Java). ¿O tal vez hay otra práctica que puedas aconsejar?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

puedes ser mas especifico en lo que quieres hacer?

En su controlador de get , obtiene los métodos de clase ("funciones"), pero no debe llamar a la función aquí.

si devuelve una función contenedora, debe asegurarse de vincular el objeto correcto (que es el target no this ) y querrá algo de lógica para evaluar los argumentos o el nombre del método.

El nombre del método deseado es a lo que se ha referido como propKey . Entonces podría tener alguna lógica que examine propKey.

Consejo profesional: si va a realizar pruebas con el valor de propKey, tenga cuidado de que propKey podría ser un symbol , por lo que es posible que deba agregar una verificación para saber cuándo propKey es una string (por ejemplo, una prueba de expresiones regulares se transmitirá automáticamente a la cadena)

Tenga en cuenta también que podría devolver un proxy para la función también así:

 const fnProxyMaker = (fn)=>new Proxy( fn, { apply(target, that, args){ // do something before calling or whatever return target(...args); } }); const handler = { get(target, propKey, receiver) { const targetValue = Reflect.get(target, propKey, receiver); if (typeof targetValue === 'function' && propKey === 'foo1') { return fnProxyMaker(targetValue) } return targetValue; }, };

o defina los métodos como proxies en la clase:

 class SBFinder { constructor(){ ['foo1','foo2'].forEach(method=> Object.defineProperty(this, method, { get : fnProxyMaker( ({name,id})=>console.log(name+id) ) }), this ) } }
about 4 years ago · Juan Pablo Isaza 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