【问题标题】:What is the Chrome console displaying with log()?使用 log() 显示的 Chrome 控制台是什么?
【发布时间】:2012-02-06 11:35:18
【问题描述】:

我想我可能发现了 Google Chrome 的一个错误(16.0.912.75 m,撰写本文时的最新稳定版)。

var FakeFancy = function () {};
console.log(new FakeFancy());

var holder = {
    assignTo : function (func) {
        holder.constructor = func;
    }
};

holder.assignTo(function () { this.type = 'anonymous' });
var globalConstructor = function () { this.type = 'global' }

console.log(new holder.constructor());

如果您在 Firefox 中运行该块,它会显示两个都列为“对象”,第二个具有 type = local,非常好。但是如果你在 Chrome 中运行它,它会显示

> FakeFancy
> globalConstructor.type

如果你展开树,内容是正确的。但我无法弄清楚 Chrome 列出的每个记录对象的第一行是什么。因为我没有处理原型,所以这些应该是普通的旧对象,不会从任何地方继承。

起初,我以为它与 WebKit 相关,但我在最新的 Safari for Windows (5.1.2 7534.52.7) 中尝试过,都显示为“对象”。

我怀疑它试图猜测构造函数的调用位置。匿名构造函数的间接性是否搞砸了?

【问题讨论】:

  • 如果您的问题只是关于前两行及其输出,为什么还要包含如此多的代码? (“但我无法弄清楚 Chrome 将什么列为第一行。”)我一定是误解了......
  • 抱歉,添加了清晰的编辑。记录的每个对象的第一行。

标签: javascript google-chrome webkit google-chrome-devtools


【解决方案1】:

第一行是结果

console.log(new FakeFancy());

WebKit 控制台通常会尝试进行“构造函数名称推断”以让您知道它正在输出什么类型的对象。我的猜测是 Chrome 中包含的更新版本(与 Safari 5.1 不同)可以对构造函数声明进行推断,例如

var FakeFancy = function () {};

不只是像

function FakeFancy() {}

这就是你看到差异的原因。

【讨论】:

    猜你喜欢
    • 2011-06-12
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 2017-11-23
    • 1970-01-01
    • 2012-09-29
    相关资源
    最近更新 更多