使用log()显示的Chrome控制台是什么?

时间:2012-01-09 23:47:17

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

我想我可能发现了Google Chrome的错误(16.0.912.75米,这是撰写本文时的最新版本)。

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)并且都显示为“对象”。

我怀疑它试图对构造函数的调用位置做一些猜测。匿名构造函数的间接是否会搞乱它?

1 个答案:

答案 0 :(得分:1)

第一行是

的结果
console.log(new FakeFancy());

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

var FakeFancy = function () {};

而不仅仅是

之类的
function FakeFancy() {}

这就是为什么你会看到这种差异。