それはかなり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仕様のネイティブオブジェクトではなく)host objectであり、Mozilla(またはGoogle、Microsoftなど)が望むように動作する可能性があるため、これはまったく問題ありません。
なぜこの現象がありますか?私はFirefoxデベロッパーではないので、私は確信はできませんが、console
がデバッグツールなので、これが具体的に行われたと思います。 Function
のプロトタイプチェーンで悩んで、console.log
を使って何をしているのかを確認したいのであれば、デバッグレポートツールがあなたのことを誤って報告してしまうとひどいことになります。
EDIT:
console
の機能は、それらのすべてで使用される別のプロトタイプチェーンを持っている:
console.log.__proto__ == console.dir.__proto__ // true
console.log.__proto__.func = 5;
console.dir.__proto__.func == 5 // true
console'はそれがないことを意味*ホストオブジェクト*、である 'ので、おそらくそれです仕様ルールに縛られています - [ネイティブオブジェクトとホストオブジェクトの違いは何ですか?](http://stackoverflow.com/questions/7614317/what-is-the-difference-between-native-objects-and-host -objects) – apsillers
@apsillersありがとう、私は他のホストオブジェクトを試していますが、彼らはこの問題がないようです。 –