Ali*_*iba 6 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
Run Code Online (Sandbox Code Playgroud)
这是一个错误还是有任何原因?
在 Firefox 中,这一点很能说明问题:
var foo = function() {}
foo.__proto__ == Function.prototype;
Run Code Online (Sandbox Code Playgroud)
是true,而语句:
console.log.__proto__ == Function.prototype;
console.log instanceof Function;
Run Code Online (Sandbox Code Playgroud)
都是false。
因此,console.log不包含Function.prototype在其原型链中,因此更改Function.prototype对 没有影响console.log。这完全没问题,因为console它是一个主机对象(而不是 ECMAScript 规范中的本机对象),并且可以按照 Mozilla(或 Google、Microsoft 等)的意愿运行。
为什么会存在这种行为?我不是 Firefox 开发人员,所以我不能肯定地说,但我最好的猜测是这是专门做的,因为它console是一个调试工具。如果你搞乱了 的Function原型链,然后想用它来验证你在做什么,那么如果你的调试报告工具本身开始搞乱并向你错误报告事情,console.log那将是可怕的。
编辑:
这些console函数有一个供它们使用的单独的原型链:
console.log.__proto__ == console.dir.__proto__ // true
console.log.__proto__.func = 5;
console.dir.__proto__.func == 5 // true
Run Code Online (Sandbox Code Playgroud)