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

271
Visualizações
Cómo enviar un evento desde una función en lugar de una ventana

Lo siguiente funciona bien y mi detector de eventos obtiene el evento personalizado porque envía el evento desde la ventana y mi detector de eventos está escuchando para loading en la ventana, todo bien.

 const MyLib = mylib(); function mylib() { const res = { init: (data) => { let loading = new CustomEvent('loading', {detail: { loading: true }}); window.dispatchEvent(loading); } } return res; }

detector de eventos

 window.addEventListener('loading', handleLoading);

¿Cómo puedo cambiarlo a MyLib.addEventListener en lugar de window.addEventListener ?

y..

window.dispatchEvent(loading); a MyLib.dispatchEvent(loading);

El error que recibo es TypeError: MyLib.addEventListener is not a function

La respuesta a continuación funciona en una clase, pero me gustaría saber si esto es posible sin usar una clase.

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

0

Se puede utilizar proxy para lograr los requisitos.

Aquí hay un fragmento que envuelve el objeto MyLib original en un Proxy , cuya trampa de get se activa al acceder a addEventListener o dispatchEvent .

 function mylib() { const res = { init: (data) => { let loading = new CustomEvent('loading', {detail: { loading: true }}); MyLib.dispatchEvent(loading); } } return res; } const MyLib = new Proxy(mylib(), { get: function(target, prop) { if (prop === `addEventListener`) { return (...args) => window.addEventListener(...args); } if (prop === `dispatchEvent`) { return (...args) => window.dispatchEvent(...args); } return target[prop]; } }); MyLib.addEventListener('loading', () => { console.log("Hello world !!!") }); MyLib.init();
about 4 years ago · Juan Pablo Isaza Relatório

0

Para enviar y escuchar eventos en un objeto, el objeto deberá heredar de la interfaz EventTarget .

 class MyLib extends EventTarget { constructor() { super(); } init(data) { let loading = new CustomEvent('loading', { detail: { loading: true } }); this.dispatchEvent(loading); } } // somewhere myLib is an instantiation of MyLib useEffect(() => { myLib.addEventListener('loading', handleLoading); return () => { myLib.removeEventListener('loading', handleLoading); }; }, []);
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