我已使用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
这是一个错误还是有任何原因?
答案 0 :(得分:2)
在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
是host object(而不是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