Object.create 更改 Chrome 中原型对象的控制台输出?

Object.create alters console output of proto object in Chrome?

我今天在闲逛时注意到 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 中,不是通过 Object.create 创建的,但在记录时显示 Object. 我没有打错,误问了c。 b的日志在我还没接触那个对象的时候就被改了。创建另一个实例 c,不应改变 b

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

这对于调试目的很重要。

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

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

Chrome 41 的输出:

Chrome 42 的输出:

当您在开发工具中键入内容时,他们改进了语法高亮显示,这可能已损坏。我联系了一位深入参与开发工具的朋友。不错的发现。


没有。你描述的问题很真实。

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

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

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