2011-08-10 12 views
5

なぜwindowselfであり、selfwindowオブジェクトであるのか分かりません。ウィンドウオブジェクト内の奇妙な自己オブジェクト

あなたがdev-toolsまたはFirebugにアクセスしてwindowと書くと、selfがこのオブジェクトの下にあるDOM windowオブジェクトが得られます。変わった部分は、windowselfの下にあるということです!

あなたは

window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self.window.self 

を書くことができますし、まだあなたは、windowオブジェクトを取得します!

どのように!私のコメントの一つに対応して

+0

http://stackoverflow.com/questions/6145544/self-document-this-top-window – Shaz

+0

これまでに自己参照は見ていませんか?たとえば、シングルトンのパターンではよくあります.JavaScriptにはプライベート変数が直接存在しないため、無限にアクセスできる可能性があります。私はこれを「IS」と言っているわけではありませんが、ユースケースや理由の説明 – PhD

+0

これは関数ではないオブジェクトです。 JavaScriptで自己参照オブジェクト作成メソッドがあっても、私はそれを覚えています。 – Mohsen

答えて

5

それは循環参照ですので、それは終わりではありません。コンパイラのみ は1つの参照を作成します。参照が作成された元のオブジェクトの への参照に戻っただけです。だからこそ、あなたは することができます。window.window.window ...このように:var obj = {}; obj.obj = obj ;. 参照は1つしか作成されていませんが、参照先は です。したがって、obj.obj.obj.obj.obj.obj === objを実行できます。

コメントはここで見ることができます:Is window really global in Javascript?

+0

OK。 var obj = {}、次にobj.obj = objだが、var obj = {}; obj.self = obj ;?今すぐobj.self.obj return undefined – Mohsen

+0

@Mohsen: 'self'は' window'のプロパティです。 'window.self ===ウィンドウ'。ですから、あなたは 'window.self === window.self'を得るでしょう。私のポストのコメントは 'window.window'だけを参照していました。 – Shaz

+0

JavaScriptでこれをどうやって再現するか知っていますか? "親と自己参照オブジェクト": - \ – Mohsen

1

this page、およびsee hereを参照してください。 window.windowは自分自身への参照ですので、window.window.window ... windowを繰り返すことができるので、常に現在のウィンドウを返します。 selfは、現在のウィンドウへの参照を返します。したがって、同じですが、これは常にDOMWindowオブジェクトを返します。

+0

私はwindow.window.windowがMDNリンクを介してどのように動作するかを理解しています。どのようにして自己参照オブジェクトを作成しますか? – Mohsen

+0

@Mohsenあなたはあなたの他のコメントの一つでそれを行いました 'var obj = {}; obj.self = obj; '。今、 'obj.self == obj.self.self == obj.self.self.self == obj'です。 – Pointy

+0

はい、obj.self.self.self ...が正しいように見えます。自己はそれにobjを持っていません。 obj.self.objは機能しません。 (コメントでコードをどのようにマークするか?) – Mohsen

関連する問題