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

今天我玩的时候,我注意到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版本中 – 唯一的区别在于如何在调试器中记录和处理对象.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...