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

106
Visualizações
Cómo anular una función en una clase que se devuelve desde el módulo en javascript

Tengo una clase de registro en un módulo que contiene una función estática para devolver una instancia de sí mismo, por lo que una versión simplificada se ve así:

 Class Logger { static createFromConfig(key) { return new Logger(key); } info(message) { // do logging stuff } debug(message) { // do logging stuff } error(message) { // do logging stuff } }

Esto se usa en muchos lugares a lo largo de nuestra base de código como:

 import logging from 'logging'; const log = logging.Logger.createFromConfig('keyname'); log.info('App starting');

En un proyecto, deseo agregar alguna funcionalidad adicional a la función de error, sin tener que cambiar el código en ninguno de los lugares que lo llaman. Entonces algo como

 log.error = () => { // do my extra stuff here log.error() // call the original error function }

Intenté extender la clase como se muestra a continuación, pero creo que el problema es que la clase base original simplemente se devuelve de la función estática, por lo que no se llama a mi función anulada:

 class dblogger extends logging.Logger { error(...args) { // do my extra stuff here super.error(); } } const dblogging = { Logger: dblogger }; export default dblogging;
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Debe llamar al método original desde el prototipo Logger .

 function getdblogger(keyname) { const log = logging.Logger.createFromConfig(keyname); log.error = function(message) { // do my extra stuff here Logger.prototype.error.call(this, message) // call the original error function } return log; }

Tenga en cuenta que debe usar una función ordinaria en lugar de una función de flecha para que obtenga this .

Si puede realizar cambios en la clase Logger original, puede createFromConfig() para permitir que se especifique la clase, luego puede usar su subclase.

 Class Logger { static createFromConfig(key, loggerClass = Logger) { return new loggerClass(key); } info(message) { // do logging stuff } debug(message) { // do logging stuff } error(message) { // do logging stuff } }

Luego en sus archivos:

 const log = logging.Logger.createFromConfig('keyname', dblogger);
about 4 years ago · Juan Pablo Isaza Relatório

0

Creo que realmente quieres usar este .constructor.prototype. error dentro de su método:

 class Logger{ static createFromConfig(key){ return new Logger(key); } info(message){ // do logging stuff } debug(message){ // do logging stuff } error(message){ return message; // do logging stuff } } class logging extends Logger{ } const log = logging.createFromConfig('test'); log.error = function(message){ console.log(this.constructor.prototype.error('Logger message here')); console.log(message); } log.error('within log');

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