web-dev-qa-db-ja.com

自己と窓の違いは何ですか?

ページがフレーム内にあるかどうかの検出を処理するJavaScriptがあります。 top.frames []などを使用しましたが、すべて正常に動作します。

このスクリプトでは、「ウィンドウ」または「自己」を同じ意味で使用でき、すべてが引き続き機能することに気付きました。 HTMLページで使用する場合、「ウィンドウ」は「セルフ」と同じですか?

40
Milan Babuškov

From Javascript:The Definitive Guide

Windowオブジェクトは、Webブラウザウィンドウを操作できるようにするいくつかのプロパティとメソッドを定義します。また、Documentオブジェクトのdocumentプロパティなど、他の重要なオブジェクトを参照するプロパティも定義します。最後に、Windowオブジェクトには、windowselfの2つの自己参照プロパティがあります。いずれかのグローバル変数を使用して、Windowオブジェクトを直接参照できます。

つまり、windowselfはどちらも、クライアント側のJavaScriptのグローバルオブジェクトであるWindowオブジェクトへの参照です。

19
Ender

self読み取り専用プロパティであり、windowよりも柔軟性があり、selfを直接使用することもあります。これは、windowの参照が操作コンテキストに応じて変化するためです(selfが存在する場合にのみ存在するwindow.selfとは異なります)。他の人が言及しているように、それは比較にも最適です。

たとえば、Webワーカー(独自のバックグラウンドスレッドに存在する)内でselfを使用する場合、selfは実際にはWorkerGlobalScope.selfを参照します。ただし、通常のブラウザコンテキストでselfを使用する場合、documentは単にWindow.selfwindowaddEventListener()、およびその他すべてのものを含むもの)への参照を返します。

TL; DR.selfwindow.selfが存在しない場合は存在しませんが、selfを単独で使用すると、従来のウィンドウ/ブラウザコンテキストのWindow.self、またはWebワーカーのWorkerGlobalScope.selfを指します。コンテキスト。

いつものように、MDNはこのテーマについて素晴らしい記事を書いています JavaScriptドキュメントで:)


補足:ここでのselfの使用法は、ローカル変数を宣言する一般的なJSパターンと混同しないでください:var self = thisは、切り替え後にコンテキストへの参照を維持します。

詳細については、こちらをご覧ください: JavaScriptでのバインド状況から抜け出す

19
Titus

window.selfのMDNページ からの説明と例を次に示します。

if (window.parent.frames[0] != window.self) {
   // this window is not the first frame in the list
}

window.selfは、ほとんどの場合、現在のウィンドウが親フレームセットの最初のサブフレームであるかどうかを確認する上記の例のような比較で使用されます。

最近フレームセットを使用している人がいないことを考えると、selfの有用なケースはないと考えても大丈夫だと思います。また、少なくともFirefoxでは、window.selfではなくwindowに対してテストすることは同等です。

11
Jesse Dhillon

windowselfはどちらも、現在のWebページのグローバルオブジェクトを参照します。

詳細については、 http://www.howtocreate.co.uk/tutorials/javascript/browserinspecific をご覧ください。

4
davehauser