我添加了一个使用Function.prototype.func = ...
toFunction
但在 Firefox 中尚未添加的功能console.log
:
Function.prototype.func = function () { return this.toString(); };
alert(typeof console.log.func); // in FF: undefined, in Chrome: function
这是一个错误还是有任何原因?
我添加了一个使用Function.prototype.func = ...
toFunction
但在 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
不包含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