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
。ホスト オブジェクト(ECMAScript 仕様のネイティブ オブジェクトではなく) であり、Mozilla (または Google、Microsoft など) が望むように動作する可能性があるconsole
ため、これはまったく問題ありません。
なぜこの動作が存在するのですか? 私は Firefox の開発者ではないので、断言はできませんconsole
が、デバッグ ツールとして特別に行われたのではないかと推測されます。Function
のプロトタイプ チェーンをいじくり回しconsole.log
て、自分が行っていることを確認するために使用したい場合、デバッグ レポート ツール自体がめちゃくちゃになり、誤った報告をしてしまうと大変なことになります。
編集:
console
関数には、それらすべてで使用される個別のプロトタイプ チェーンがあります。
console.log.__proto__ == console.dir.__proto__ // true
console.log.__proto__.func = 5;
console.dir.__proto__.func == 5 // true