问题
If I create a Foo class using "traditional" Javascript classes, both chrome and Firefox will show the Foo name when printing Foo instances on the console:
function Foo(){
this.x = 10;
}
console.log(new Foo());
// Foo {x: 10}
On the other hand, if I use hand rolled prototypal inheritance then I don't get the helpful name when debugging
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}
Is there a way to have classes created via my prototypal system show their name when printed on the console? So far, the only way I could think of is an ugly hack abusing eval to give different names to the currently anonymous constructor function that mkClass returns.
回答1:
It seems that FF and chrome just print constructor property. Try setting it to something meaningful and you should see the result.
function mkClass(init, proto){
proto.constructor = {name: "Foo"};
return function(/**/){
var obj = Object.create(proto);
init.apply(obj, arguments);
return obj;
}
}
来源:https://stackoverflow.com/questions/25141170/how-do-chrome-and-firefox-print-the-objects-class-name-in-the-console