Как Chrome и Firefox выводят имя класса объекта в консоли?
Если я создаю класс Foo с использованием «традиционных» классов Javascript, и chrome, и Firefox будут отображать имя Foo при печати экземпляров Foo на консоли:
function Foo(){
this.x = 10;
}
console.log(new Foo());
// Foo {x: 10}
С другой стороны, если я использую наследуемое прототипное наследование, то при отладке я не получаю полезного имени.
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}
Есть ли способ, чтобы классы, созданные в моей прототипной системе, отображали свое имя при печати на консоли? До сих пор я мог думать только о том, как уродливый хакер злоупотребляет eval, чтобы присвоить различные имена текущей анонимной функции конструктора, которую возвращает mkClass.