Object.create改变Chrome中proto对象的控制台输出?

时间:2015-04-19 11:12:47

标签: javascript google-chrome console.log object-create

当我注意到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

这对于调试目的很重要。

enter image description here

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

1 个答案:

答案 0 :(得分:5)

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

Chrome 41的输出: enter image description here

Chrome 42的输出:

当你输入开发工具时,他们对语法高亮进行了改进,这可能会破坏。我找到了一位深深参与开发工具的朋友。很好找。


没有。你描述的问题非常真实。

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

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

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