Según la especificación de JavaScript, un constructor de clase devuelve el valor de this cuando la new palabra clave lo llama.
¿Podemos cambiar el valor de retorno a otra cosa? En caso afirmativo, ¿es una mala práctica? Pregunto si es una mala práctica, por ejemplo, puede ser por alguna cosa relacionada con la herencia. Por ejemplo
class Car { constructor(color) { this.color = color return this.printColor } printColor = () => { console.log(this.color) } } const car1 = new Car('red') car1()¿Es una idea nueva o es algo normal que la gente suele hacer todos los días?
Un constructor de clase devuelve el valor de
thiscuando lanewpalabra clave lo llama.
Consulte ¿Qué es la palabra clave 'nueva' en JavaScript? y ¿Cómo funciona el nuevo operador en JavaScript? para detalles.
¿Podemos cambiar el valor de retorno a otra cosa?
Sí, siempre que sea un objeto, puede anular el valor predeterminado utilizando return , como lo hizo en su código de ejemplo. Consulte ¿Qué valores puede devolver un constructor para evitar devolver esto? y ¿Qué se devuelve de un constructor? para saber cómo funciona eso exactamente.
En caso afirmativo, ¿es una mala práctica?
Sí. Tener una new Car y no una instancia Car es extraño e inesperado. La gente no hace esto todos los días, y no deberían empezar a hacerlo :-)
La única excepción es el patrón singleton (que por supuesto es problemático en sí mismo ), donde el constructor puede return la instancia singleton en lugar de una nueva. (Sin embargo, hay otras formas de escribir código JS para crear singletons, que evitan los constructores por completo).