Independientemente de la intención, no me queda claro por qué uno es válido y otro no. Si alguien pudiera señalar la parte relevante de la especificación del idioma, sería especialmente útil.
class Foo {
bar() {}
}
Foo.prototype.baz = function() {};
const f = new Foo();
new f.baz(); // Valid
new f.bar(); // invalid, throws error
Como se señaló en los comentarios sobre la pregunta original, la especificación lo define de esta manera. Un constructor debe tener los [[Construct]] s internos, y mientras que las expresiones de funciones ordinarias obtienen este conjunto de ranuras , las definiciones de métodos no . Esto también se describe en MDN (como señaló otro comentarista).