Definiendo métodos prototipo dentro del constructor

Hoy, vi un patrón de JavaScript que nunca había visto en toda mi vida. No puedo decir el propósito de usar este patrón. Me parece mal, pero quiero ser un poco conservador. Puede ser un patrón increíble que nunca vi antes.

function Dog() {
    Dog.prototype.bark = function () {
        alert('woof!');
    }

    this.bark = function () {
        Dog.prototype.bark();
    }

    this.bark();
}

Primero, no soy fanático de hacer métodos (como miembros privilegiados) dentro del constructor sin ninguna razón. Causaría crear funciones cada vez que se crea una instancia. En segundo lugar, en este fragmento de código, también llama al nombre del prototipo "Perro", en lugar de "esto". Esto me hace súper confundido.

¿Alguien sabe qué tiene de bueno?

¡Gracias! Graci

Respuestas a la pregunta(2)

Su respuesta a la pregunta