我想我可能发现了 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) 中尝试,两者都显示为“对象”。
我怀疑它试图对构造函数的调用位置进行一些猜测。匿名构造函数的间接寻址是否搞砸了?
第一行的结果是
console.log(new FakeFancy());
WebKit 控制台通常会尝试进行“构造函数名称推断”,让您知道它输出的对象类型。我的猜测是 Chrome 中包含的最新版本(而不是 Safari 5.1)可以对构造函数声明进行推断,例如
var FakeFancy = function () {};
不仅仅是像这样的
function FakeFancy() {}
所以这就是你看到差异的原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)