es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo llamar a una función estática de un niño desde el padre en javascript?

Tal vez lo que estoy buscando sea imposible, pero sería muy conveniente para mis necesidades.

class Music extends Database {
    static ref(id){return <code>musics/${id}</code>}
}

class Book extends Database {
    static ref(id){return <code>books/${id}</code>}
}

class Database {
    static fetch(id){
        const data = request(Database.children.ref(id)) // <===== AQUÍ, por supuesto, no existe la función 'children'
        return new this(data)
    }
}

Music.fetch(‘1234’) 

Book.fetch(‘9876’)

¿Cómo llamar a la función estática ‘ref’ desde la función estática ‘fetch’ en la clase padre?

Esto evitará copiar la función ‘fetch’ en todas las clases hijas.

Si esta solución es un anti-patrón, ¿qué puedo hacer?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, no es posible llamar directamente a un método estático de una clase padre en una clase hija. Una solución alternativa podría ser pasar la propia clase como parámetro al método estático de la clase padre y luego llamar al método estático desde la clase hija pasando la clase hija como parámetro. Aquí tienes un ejemplo:

    class Music extends Database {
        static ref(id){return `musics/${id}`}
    }
    
    class Book extends Database {
        static ref(id){return `books/${id}`}
    }
    
    class Database {
        static fetch(id, childClass){
            const data = request(childClass.ref(id));
            return new childClass(data);
        }
    }
    
    Music.fetch('1234', Music); //llamar a la función fetch de la clase Music
    Book.fetch('9876', Book); //llamar a la función fetch de la clase Book
    

    De esta manera puedes evitar duplicar la función fetch en cada clase hija, pero requiere pasar la clase hija al método padre. Otra alternativa podría ser utilizar una función de fábrica para crear instancias de las clases hijas, lo cual eliminaría la necesidad de un método fetch por completo.

Comments are closed.