私はJavaScriptの複雑なビットを見ています。これは、オブジェクトとスクリプトのあらゆる種類のランタイム/動的操作を実行しています。その過程で、私はJavascriptとその特異性についてあらゆる種類の細かな点を学んでいます。
しかし、これは私を困惑させました。こんな状況はありますか
window !== this.window; //true
言い換えれば、ウィンドウをまっすぐにする代わりに、いつthis.windowを書くのでしょうか?
私はJavaScriptの複雑なビットを見ています。これは、オブジェクトとスクリプトのあらゆる種類のランタイム/動的操作を実行しています。その過程で、私はJavascriptとその特異性についてあらゆる種類の細かな点を学んでいます。
しかし、これは私を困惑させました。こんな状況はありますか
window !== this.window; //true
言い換えれば、ウィンドウをまっすぐにする代わりに、いつthis.windowを書くのでしょうか?
「こんな状況はありませんか
window !== this.window; //true」
確かに、プロパティのないオブジェクト、またはグローバル オブジェクトを指していないプロパティをthis持つオブジェクトを参照するときはいつでも(がグローバルであるブラウザ環境を想定して) ..window.windowwindow
「...いつ
this.windowストレートに書く代わりに書くのwindowですか?
プロパティがグローバルへの参照ではないことが予想されるthisオブジェクトを参照する場合。.window
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そのコードブロック内でグローバルウィンドウを非表示にする変数を宣言します。しかし、そうしないでください。
グローバル名前空間も実際に変更できると思いますが、その方法は思い出せません。
まあ、それは重複していthisますが、グローバルスコープにいるときにグローバルスコープを参照し(エラー)、グローバルスコープはwindow. (そうthis == windowでありwindow.window == window、真です)
new Pie()( )などのコンストラクターとして使用されている関数を使用している場合はthis、グローバル スコープではなく、作成されたオブジェクトを参照します。this実際には、コードを実行している場所によって異なります。