私はオブジェクトとスクリプトのあらゆる種類の実行時/動的操作を行っているJavaScriptの複雑なビットを見ています。その過程で、私はJavascriptとその特質に関するあらゆる種類の細部を学んでいます。ウィンドウとthis.windowの違いは何ですか、javascript?
これは私には悩まされています。これまでの状況はありますか
言い換えれば、まっすぐ窓の代わりにthis.windowと書いてみましょうか?
私はオブジェクトとスクリプトのあらゆる種類の実行時/動的操作を行っているJavaScriptの複雑なビットを見ています。その過程で、私はJavascriptとその特質に関するあらゆる種類の細部を学んでいます。ウィンドウとthis.windowの違いは何ですか、javascript?
これは私には悩まされています。これまでの状況はありますか
言い換えれば、まっすぐ窓の代わりにthis.windowと書いてみましょうか?
は
this
が.window
財産なしまたはグローバルオブジェクトを指していない.window
プロパティを持つオブジェクトを参照するときは常に確かに、「window !== this.window; //true
状況は、これまであります」 (window
がグローバルであるブラウザ環境を想定)。
は」...ときあなたは今まで
this.window
の代わりに、まっすぐwindow
書くでしょう?
this
が.window
プロパティがグローバルに参照されていないと予想されているオブジェクトを指し。
これは重複していますが、this
は、グローバルスコープ(err)にいるときにグローバルスコープを参照し、グローバルスコープはwindow
です。あなたはコンストラクタとして使われている機能にしている場合は(そうthis == window
とwindow.window == window
が真である)
、例えば、(new Pie()
)のために、this
は、もはやグローバルスコープを意味していないのではなく、作成されたオブジェクト。 this
は実際にどこでコードを実行しているかによって異なります。
this.windowはまだコンストラクタ内のグローバルウィンドウに解決されません(明示的に上書きされない限り、コンストラクタのどこかで推測しています)。 – blueberryfields
これを 'new SomeConstructor()'と呼び出すと、オブジェクトのインスタンス化を参照していると思います。これは単なる例です。 – gengkev
this
は、C++やjavaと同じように、javascriptで名前が暗黙に検索されません。
は、またはsomeobject.foo
の代わりにfoo
を参照して、var
で指定された変数を順番に試し、次にグローバル名前空間を試します。
this.var
は、this
がwindow
オブジェクトであるデフォルトのグローバル名前空間を意味し、のみthis
のメンバー(およびそのプロトタイプ、およびプロトタイプの試作品など)のスクリプトのトップレベルで
を検索しますそれはfoo.meth()
でメソッドを呼び出すまであなたが滞在する場所です。 window
には、奇妙なことに、window
というメンバーが含まれています。だから、一般的に行くことができます:
window.window.window.window.location = "some_url"
あなたが好きなら。実際、あなたが「ただそこにいる」と想定している名前の大部分は、グローバルオブジェクトのメンバーです。
Object === window.Object
あなたが好きなら、あなたはそのコードブロック内でグローバルウィンドウを隠しwindow
という変数を宣言する
var window;
を言うことができます。しかし、しないでください。
実際にグローバル名前空間も変更できると思いますが、どう思いますか。
グローバル名前空間を上書きできますか? O.o – gengkev
実際に私はそのことについてはわかりません。回答が修正されました。 –
可能な複製:http://stackoverflow.com/questions/4180013/javascript-this-window-not-equal-to-window – jdi
ええ、それは重複していますが、それにもかかわらず良い質問です。 – Nick
@jdi私は、他の質問が私に答えているかどうかは完全にはわかりません。それは* 8 *の下でのみthis.window!==ウィンドウであり、グローバル名前空間でのみ*ですか? – blueberryfields