Chrome和Firefox如何在控制台中打印对象的类名?

时间:2014-08-05 14:22:30

标签: javascript eval prototypal-inheritance

如果我使用“传统”Javascript类创建Foo类,则在控制台上打印Foo实例时,chrome和Firefox都会显示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返回的当前匿名构造函数。

1 个答案:

答案 0 :(得分:2)

似乎FF和chrome只打印constructor property。尝试将其设置为有意义的内容,您应该看到结果。

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