javascript - 为什么在 Firefox 中 Function.prototype.func=... 不影响 console.log?

标签 javascript firefox

我已经使用 Function.prototype.func = ... 添加了一个函数到 Function 但在 Firefox 中它没有被添加 console.log:

Function.prototype.func = function () { return this.toString(); };
alert(typeof console.log.func); // in FF: undefined, in Chrome: function

这是错误还是有任何原因?

最佳答案

在 Firefox 中很明显:

var foo = function() {}
foo.__proto__ == Function.prototype;

true,而语句:

console.log.__proto__ == Function.prototype;
console.log instanceof Function;

都是false

因此,console.log 的原型(prototype)链中不包含 Function.prototype,因此更改 Function.prototype控制台日志。这很好,因为 console 是一个 host object (而不是 ECMAScript 规范中的 native 对象)并且可以按照 Mozilla(或 Google、Microsoft 等)的意愿行事。

为什么存在这种行为?我不是 Firefox 开发人员,所以我不能肯定地说,但我最好的猜测是,这是专门完成的,因为 console 是一个调试工具。如果您在 Function 的原型(prototype)链上乱搞,然后想使用 console.log 来验证您在做什么,那么如果您的调试报告工具 < em>自己 开始搞砸并向您误报事情。

编辑:

console 函数有一个单独的原型(prototype)链供所有函数使用:

console.log.__proto__ == console.dir.__proto__ // true
console.log.__proto__.func = 5;
console.dir.__proto__.func == 5  // true

关于javascript - 为什么在 Firefox 中 Function.prototype.func=... 不影响 console.log?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16364006/

相关文章:

javascript - 将对象数组缩减为在所有对象共享的属性中找到的唯一字符串 (javascript)

javascript - 使用 jquery 将文本更改为 h1?

javascript - Mongoose 保存空数组

javascript - 如何使用 JavaScript 计算 GridView 列的总和?

firefox - 如何禁用Firefox控制台对重复输出进行分组?

javascript - Firefox 点击事件错误

firefox - 使用 CSS3 为显示 :none 设置不透明度动画

javascript - THREE.js 行对象未在浏览器中运行

javascript - 如何在 greasemonkey 中更新用户脚本

css - 想在不点击任何键的情况下查看源代码