我想我可能发现了 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 中运行该 block ,它会显示两者都列为“对象”,第二个具有类型 = 本地,非常好。但是如果你在 Chrome 中运行它,它会显示
> FakeFancy
> globalConstructor.type
如果伸展树(Splay Tree),内容是正确的。但我无法弄清楚 Chrome 将什么列为每个记录对象的第一行。因为我没有操纵原型(prototype),所以这些应该是没有从任何地方继承的普通旧对象。
起初,我认为它与 WebKit 相关,但我在最新的 Windows 版 Safari (5.1.2 7534.52.7) 中尝试,两者都显示为“对象”。
我怀疑它正在尝试猜测从何处调用构造函数。匿名构造函数的间接访问是否搞砸了?
最佳答案
第一行是结果
console.log(new FakeFancy());
WebKit 控制台通常会尝试进行“构造函数名称推断”,让您知道它正在输出什么类型的对象。我的猜测是 Chrome 中包含的更新版本(相对于 Safari 5.1)可以对构造函数声明进行推断,例如
var FakeFancy = function () {};
不仅是这样
function FakeFancy() {}
这就是您看到差异的原因。
关于javascript - 使用 log() 显示的 Chrome 控制台是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8796806/