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 版本 - 唯一的区别在于对象如何 记录 并在 调试器.
我今天在闲逛时注意到 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 版本 - 唯一的区别在于对象如何 记录 并在 调试器.