2012-04-09 1 views
3

私はオブジェクトとスクリプトのあらゆる種類の実行時/動的操作を行っているJavaScriptの複雑なビットを見ています。その過程で、私はJavascriptとその特質に関するあらゆる種類の細部を学んでいます。ウィンドウとthis.windowの違いは何ですか、javascript?

これは私には悩まされています。これまでの状況はありますか

言い換えれば、まっすぐ窓の代わりにthis.windowと書いてみましょうか?

+5

可能な複製:http://stackoverflow.com/questions/4180013/javascript-this-window-not-equal-to-window – jdi

+0

ええ、それは重複していますが、それにもかかわらず良い質問です。 – Nick

+1

@jdi私は、他の質問が私に答えているかどうかは完全にはわかりません。それは* 8 *の下でのみthis.window!==ウィンドウであり、グローバル名前空間でのみ*ですか? – blueberryfields

答えて

3

this.window財産なしまたはグローバルオブジェクトを指していない.windowプロパティを持つオブジェクトを参照するときは常に確かに、「window !== this.window; //true状況は、これまであります」 (windowがグローバルであるブラウザ環境を想定)

は」...ときあなたは今までthis.windowの代わりに、まっすぐwindow書くでしょう?

this.windowプロパティがグローバルに参照されていないと予想されているオブジェクトを指し

1

これは重複していますが、thisは、グローバルスコープ(err)にいるときにグローバルスコープを参照し、グローバルスコープはwindowです。あなたはコンストラクタとして使われている機能にしている場合は(そうthis == windowwindow.window == windowが真である)

、例えば、(new Pie())のために、thisは、もはやグローバルスコープを意味していないのではなく、作成されたオブジェクト。 thisは実際にどこでコードを実行しているかによって異なります。

+0

this.windowはまだコンストラクタ内のグローバルウィンドウに解決されません(明示的に上書きされない限り、コンストラクタのどこかで推測しています)。 – blueberryfields

+0

これを 'new SomeConstructor()'と呼び出すと、オブジェクトのインスタンス化を参照していると思います。これは単なる例です。 – gengkev

2

thisは、C++やjavaと同じように、javascriptで名前が暗黙に検索されません。

は、またはsomeobject.fooの代わりにfooを参照して、varで指定された変数を順番に試し、次にグローバル名前空間を試します。

this.varは、thiswindowオブジェクトであるデフォルトのグローバル名前空間を意味し、のみthisのメンバー(およびそのプロトタイプ、およびプロトタイプの試作品など)のスクリプトのトップレベルで

を検索しますそれはfoo.meth()でメソッドを呼び出すまであなたが滞在する場所です。 windowには、奇妙なことに、windowというメンバーが含まれています。だから、一般的に行くことができます:

window.window.window.window.location = "some_url"

あなたが好きなら。実際、あなたが「ただそこにいる」と想定している名前の大部分は、グローバルオブジェクトのメンバーです。

Object === window.Object

あなたが好きなら、あなたはそのコードブロック内でグローバルウィンドウを隠しwindowという変数を宣言する

var window;

を言うことができます。しかし、しないでください。

実際にグローバル名前空間も変更できると思いますが、どう思いますか。

+0

グローバル名前空間を上書きできますか? O.o – gengkev

+0

実際に私はそのことについてはわかりません。回答が修正されました。 –