2016-09-14 4 views
0

おそらく、私はプロトタイプチェーンを誤解しているのでしょうが、誰かがこのアサーションを真実にするプロトタイプ構造を私に説明することができますか?コンソールプロトタイプの構造

console.log.prototype === console.prototype 

私はそうlogは、基本的な関数プロトタイプを持っていることは、この

console.prototype.log = function(){...} 

のようなものであることを期待しています。そのプロトタイプは親のプロトタイプにどのように解決されますか?

私は動作するとは思っていないものを試しましたが、動作します。たとえば、代わりに行うので:

var binded = console.log.bind(console,'something'); 

を私はこの

var otherBind = console.log.bind(console.log,'something else') 
+0

あなたは 'Object.getPrototypeOf(console)=== Object.getPrototypeOf(console.log)'を探しています。これはfalseです(前者は 'Console.prototype'、後者は' Function.prototype'です)。 – Bergi

+0

この質問がどのようにリンクされたものと重複しているかわかりません。確かに他の質問にはもっと一般的なものが含まれていると思うかもしれませんが、重複するものではありません。 – Danielo515

+0

プロトタイプチェーンの構造について知りたいですが、Object.getPrototypeOfの代わりに '.prototype'を使っています'(または廃止予定の' __proto__')です。その複製はあなたの混乱を解決しますね。 – Bergi

答えて

3

console.logconsoleどちらを行うことができ、クラスのコンストラクタであるため、そのprototypeプロパティがundefinedです。 undefined === undefined以降、console.log.prototype === console.prototypetrueです。

あなたが探しているかもしれないReflect.getPrototypeOf()をチェックしてください。

console.log.bind(console.log)は、console.logthisという値で呼び出すことを意味します。バインドされた関数を呼び出すとChromeとNode.jsでは正常に動作しますが、Firefox(TypeError: 'log' called on an object that does not implement interface Console.)では失敗します。 console.log() called on object other than console behaves differently among different browsersを参照してください。

+0

しかし、コンソールログを自分自身にバインドすることはどうしたら可能ですか?それは循環参照か何か? – Danielo515

+0

こんにちは@ゴート。それは非常に奇妙です。私はconsole.logをコールバック引数として何百回も渡してみました。正しい 'this'コンテキストが存在しないので、コンソールにバインドする必要があったため、常に失敗しました。これが本当であるシナリオはありますか?ありがとうございました、ありがとうございました – Danielo515

+0

ありがとうございます@ゴドー!!あなたが新しい質問をどのように開いて、1時間以内にそれに答えたのかを知ることは楽しいことです:Dあなたは他のものへのリンクを使ってあなたの答えを編集することをやめました。 – Danielo515