¿Cómo imprimen Chrome y Firefox el nombre de la clase del objeto en la consola?

Si creo una clase de Foo usando clases de Javascript “tradicionales”, tanto chrome como Firefox mostrarán el nombre de Foo al imprimir instancias de Foo en la consola:

function Foo(){ this.x = 10; } console.log(new Foo()); // Foo {x: 10} 

Por otro lado, si uso la herencia de prototipo enrollada a mano, entonces no obtengo el nombre útil al depurar

 function mkClass(init, proto){ return function(/**/){ var obj = Object.create(proto); init.apply(obj, arguments); return obj; } } var Bar = mkClass(function(){ this.x = 10 }, {}); console.log(Bar()); // Object {x: 10} 

¿Hay alguna forma de que las clases creadas a través de mi sistema prototípico muestren su nombre cuando se imprimen en la consola? Hasta ahora, la única forma en que podría pensar es en un horrible hack que abusa de evaluación para dar diferentes nombres a la función constructora anónima que mkClass devuelve.

Parece que FF y Chrome solo imprimen propiedad de constructor . Intenta configurarlo en algo significativo y deberías ver el resultado.

 function mkClass(init, proto){ proto.constructor = {name: "Foo"}; return function(/**/){ var obj = Object.create(proto); init.apply(obj, arguments); return obj; } }