7

今天我在玩耍时注意到 Chrome 控制台中的一些对象显示为Object而不是构造函数名称。

这很奇怪,所以我将其归结为以下代码:

function Baz() {
    this.baz = true;
}
var b = new Baz();
var c = Object.create(b);
console.log(b); // why is b outputting with Object not Baz?

在上面的代码b中,不是通过 a 创建的Object.create,但是在记录时它会显示 Object. 我那里没有错字,并且错误地询问了c。当我什至还没有碰过那个对象时,b 的日志就被改变了。创建另一个实例c,不应该改变b

这一定是 Chrome 错误吧?有没有办法让 Chrome 在Baz这里正确报告?

这对于调试目的很重要。

在此处输入图像描述

更新错误提交:https ://code.google.com/p/chromium/issues/detail?id=478522

4

1 回答 1

5

更新:这确实是 Chrome 41 和 Chrome 42 之间的回归。这里正在跟踪它:http: //crbug.com/478522

Chrome 41 的输出: 在此处输入图像描述

Chrome 42 的输出:

当您在开发工具中键入时,他们对语法突出显示进行了改进,这可能会破坏。我联系了一位深入参与开发工具的朋友。很好的发现。


不,你描述的问题是非常真实的。

使用构造函数创建的对象将在记录它们时显示它们的名称,并且通常在 Chrome(和 node/io.js)中具有更好的调试体验。

出于这个原因 - 我避免Object.create在我自己的代码中使用原型继承,尽管我在概念上更喜欢它。

我想你明白这一点——但我仍然想为未来的读者澄清一下。请注意,继承仍然发生在 Object.create 版本中 - 唯一的区别在于对象在调试器中的记录和处理方式。

于 2015-04-19T11:59:27.340 回答