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

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

我想我可能发现了 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/

相关文章:

java - 在 Chrome 64 中允许访问相机和麦克风

google-chrome - Windows 身份验证弹出窗口后,Google chrome 失去焦点

javascript - 将自定义用户代理关联到特定的 Google Chrome 页面/标签

css - 如何让 wkhtmltopdf 显示 th 和 td 背景渐变?

javascript - 元素未显示在节目中和立即异步 ajax 调用

javascript - 是否可以通过 onclick 事件访问函数内部的内容?

css - 在 Safari 中使用 -webkit-perspective 时选中/单选框消失

css - -webkit-transform 围绕中心翻译

javascript - 当使用 html2canvas 渲染所有 div 时如何保存执行回调/操作

javascript - 如何将唯一的事件监听器绑定(bind)和取消绑定(bind)到同一对象?