私はJavaScriptの複雑なビットを見ています。これは、オブジェクトとスクリプトのあらゆる種類のランタイム/動的操作を実行しています。その過程で、私はJavascriptとその特異性についてあらゆる種類の細かな点を学んでいます。
しかし、これは私を困惑させました。こんな状況はありますか
window !== this.window; //true
言い換えれば、ウィンドウをまっすぐにする代わりに、いつthis.windowを書くのでしょうか?
私はJavaScriptの複雑なビットを見ています。これは、オブジェクトとスクリプトのあらゆる種類のランタイム/動的操作を実行しています。その過程で、私はJavascriptとその特異性についてあらゆる種類の細かな点を学んでいます。
しかし、これは私を困惑させました。こんな状況はありますか
window !== this.window; //true
言い換えれば、ウィンドウをまっすぐにする代わりに、いつthis.windowを書くのでしょうか?
「こんな状況はありませんか
window !== this.window; //true
」
確かに、プロパティのないオブジェクト、またはグローバル オブジェクトを指していないプロパティをthis
持つオブジェクトを参照するときはいつでも(がグローバルであるブラウザ環境を想定して) ..window
.window
window
「...いつ
this.window
ストレートに書く代わりに書くのwindow
ですか?
プロパティがグローバルへの参照ではないことが予想されるthis
オブジェクトを参照する場合。.window
this
C++ や Java のように、javascript で名前を暗黙的に検索することはありません。
javascriptでは、 orfoo
の代わりに何かを参照し、宣言された変数、次にグローバル名前空間を順番に試行します。this.foo
someobject.foo
var
this.var
this
(およびそのプロトタイプ、プロトタイプのプロトタイプなど) のメンバーのみを検索します。
スクリプトの最上位にthis
ある は、オブジェクトであるデフォルトのグローバル名前空間を参照し、 でwindow
メソッドを呼び出すまでそこにとどまりますfoo.meth()
。 window
奇妙なことに、window
それ自体を指すというメンバーが含まれています。したがって、一般的に行くことができます:
window.window.window.window.location = "some_url"
もし良かったら。実際、「ただそこにある」と思われる名前の非常に多くは、グローバルオブジェクトのメンバーです。
Object === window.Object
あなたが好きなら、あなたは言うことができます
var window;
window
そのコードブロック内でグローバルウィンドウを非表示にする変数を宣言します。しかし、そうしないでください。
グローバル名前空間も実際に変更できると思いますが、その方法は思い出せません。
まあ、それは重複していthis
ますが、グローバルスコープにいるときにグローバルスコープを参照し(エラー)、グローバルスコープはwindow
. (そうthis == window
でありwindow.window == window
、真です)
new Pie()
( )などのコンストラクターとして使用されている関数を使用している場合はthis
、グローバル スコープではなく、作成されたオブジェクトを参照します。this
実際には、コードを実行している場所によって異なります。