.window

windowオブジェクトのwindowプロパティは、windowオブジェクト自身を示します。 そのため、下記の式は全て同じwindowオブジェクトを返します。

window.window
window.window.window
window.window.window.window ...

Webページ上では、windowオブジェクトはグローバルオブジェクトでもあります。 これは下記のことを意味します。

  1. あなたのスクリプトのグローバル変数は、実際にはwindowのプロパティです。

    var global = {data: 0};
    alert(global === window.global); //"true"を表示
    
  2. プロパティの前にwindow.と書かずに、 windowオブジェクトの組み込みプロパティにアクセスする事が出来ます。

    setTimeout("alert('Hi!')", 50);  // window.setTimeoutの使用と同義
    alert(window === window.window); // "true"を表示
    

自身のオブジェクトを参照するwindowプロパティを持つ事の真意は、 (おそらく)グローバルオブジェクトへの参照を簡単にするためです。 (そうしなければ、手動でvar window = this;の割り当てを、 スクリプトの先頭で行わなければならないでしょう。)

別の理由として、このプロパティが無ければ、 例えば"window.open('http://google.com/')"と書くことが出来ず、 代わりに"open('http://google.com/')"とだけ書かなければいけなくなるでしょう。

更にこのプロパティを使用する別の理由があるとすれば、 OOP(オブジェクト指向プログラミング)と非OOP(特にJavaScriptモジュール)を提供したいライブラリあるからでしょう。 例えば、"this.window.location.href"を参照するケースで考えてみます。 JavaScriptモジュールは"window"と呼ばれるプロパティを、 例えばモジュールクラスのコンストラクタにwindowオブジェクトが渡された後で、 そのモジュールが定義したクラス内部に定義、作成することが出来ます。(翻訳に自信なし) (何もしなければ、グローバル変数"window"はそこには存在しないため) そのようにして、関数内部の"this.window"は、そのwindowオブジェクトを参照します。 そして名前空間が無い場合は、"this.window"は単純に"window"に参照が戻され、 問題なくdocumentのlocationを取得することが出来ます。

そのようなクラスのオブジェクト(そのクラスがモジュール外部で定義されたとしても)の別の利点に、 "window"の参照のハードコードを不可にするとして、windowへの参照を任意に変更出来る点が挙げられます。 (そのままでは、依然としてクラス内部にwindowオブジェクトを設定することが出来てしまいます)(翻訳に自信なし)

仕様

 Back to top

© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.

このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。

  • 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
  • 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
  • MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
  • "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。