3

私はJavaScriptの複雑なビットを見ています。これは、オブジェクトとスクリプトのあらゆる種類のランタイム/動的操作を実行しています。その過程で、私はJavascriptとその特異性についてあらゆる種類の細かな点を学んでいます。

しかし、これは私を困惑させました。こんな状況はありますか

window !== this.window; //true

言い換えれば、ウィンドウをまっすぐにする代わりに、いつthis.windowを書くのでしょうか?

4

3 に答える 3

4

「こんな状況はありませんかwindow !== this.window; //true

確かに、プロパティのないオブジェクト、またはグローバル オブジェクトを指していないプロパティをthis持つオブジェクトを参照するときはいつでも(がグローバルであるブラウザ環境を想定して) ..window.windowwindow

「...いつthis.windowストレートに書く代わりに書くのwindowですか?

プロパティがグローバルへの参照ではないことが予想されるthisオブジェクトを参照する場合。.window

于 2012-04-09T03:26:49.010 に答える
3

thisC++ や Java のように、javascript で名前を暗黙的に検索することはありません。

javascriptでは、 orfooの代わりに何かを参照し、宣言された変数、次にグローバル名前空間を順番に試行します。this.foosomeobject.foovar

this.varthis(およびそのプロトタイプ、プロトタイプのプロトタイプなど) のメンバーのみを検索します。

スクリプトの最上位にthisある は、オブジェクトであるデフォルトのグローバル名前空間を参照し、 でwindowメソッドを呼び出すまでそこにとどまりますfoo.meth()window奇妙なことに、windowそれ自体を指すというメンバーが含まれています。したがって、一般的に行くことができます:

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

もし良かったら。実際、「ただそこにある」と思われる名前の非常に多くは、グローバルオブジェクトのメンバーです。

Object === window.Object

あなたが好きなら、あなたは言うことができます

var window;

windowそのコードブロック内でグローバルウィンドウを非表示にする変数を宣言します。しかし、そうしないでください。

グローバル名前空間も実際に変更できると思いますが、その方法は思い出せません。

于 2012-04-09T03:27:39.043 に答える
1

まあ、それは重複していthisますが、グローバルスコープにいるときにグローバルスコープを参照し(エラー)、グローバルスコープはwindow. (そうthis == windowでありwindow.window == window、真です)

new Pie()( )などのコンストラクターとして使用されている関数を使用している場合はthis、グローバル スコープではなく、作成されたオブジェクトを参照します。this実際には、コードを実行している場所によって異なります。

于 2012-04-09T03:26:06.703 に答える