Web全体で、単なるlocation
ではなく_window.location
_を作成しているJavaScriptプログラマーが多数います。理由について誰かが説明してくれるかどうか気になった。 window
はグローバルオブジェクトなので、含める必要はありません-そうではありませんか?つまり、人々が_window.Math.floor
_やnew window.Date()
を書くのを見ないので、なぜlocation
で指定されるのか知りたいです。
location
は、あなたがいるウィンドウの「プロパティ」であると考えられていることを理解しています。しかし、それでも、グローバルオブジェクトを指定する理由はわかりません。そもそもlocation
を上書きすることはできません。ページをリダイレクトせずに上書きすることはできません。
それで、これは、JavaScriptの記述方法と統合されるほど長く使用されてきた奇妙なことですか、それとも、この方法で何かを行う明確な理由がありますか?私はグーグルをチェックしたが、悲しいかな、何も思いつかなかった...
私のコードでは常に2つの主な理由からwindow.location
を使用しています。
window.
接頭辞を使用すると、変数がグローバルであり、他の変数はグローバルでないことがわかります。var location
を設定でき(Wordが変数名として使用される可能性は低いわけではない)、代わりにそれを処理することを意味します。私にとって、コーディングの目的を明確にすることは非常に重要です。バグを書くことを避け、バグを見つけるときに役立ちます。
誰かがスコープチェーンのどこかにlocation
変数を定義した場合の一部の安全のため。 window.location
は、window
のプロパティへの明示的な参照にします。
(function() {
var location = 'new value'; // creating a local variable called "location"
(function() {
alert(location); // alerts "new value"
alert(window.location); // alerts the toString value of window.location
})();
})();
window.location
のプロパティとして存在するように指定されているネイティブのJavaScriptオブジェクトであるMath
とDate
は、window.location
とネイティブのMath
オブジェクトとDate
オブジェクトの間に大きな違いがあります。 window
Host object(Hostオブジェクトは、環境によって提供される、環境の一部の側面を表すオブジェクトであり、ネイティブJavaScriptオブジェクトと同じルールの対象ではありません。他のHostオブジェクトには、document
およびDOM要素)。
ブラウザーのwindow
には2つの目的があります。1つ目は(詳細に指定された)ECMAScriptグローバルオブジェクトとして機能し、2つ目はブラウザー環境に関する情報を提供するHostオブジェクトとして機能します。 Hostオブジェクトキャパシティでwindow
を使用する場合は、明示的にwindow.
接頭辞を付けることをお勧めします。location
が機能しないという事実は、window
の統合失調症の性質による偶然です。また、他の回答で指摘されているように、これには、現在のコンテキストに別のlocation
変数が存在する場合にユーザーを保護するという利点もあります。
Date
またはMath
の前にwindow.
を付けないことの1つの理由は、そうすると、ブラウザー以外の環境では機能しないコードが作成されるためです。他の環境では、通常、グローバルオブジェクトのエイリアスとしてwindow
を提供していません。
コーディングの一部は明快さです。数学や日付とは異なり、場所は概念的にはウィンドウのプロパティであるため、コードを含めるとコードがより明確になります。窓。"プレフィックスは、縮小のために削除するのが理想的です。
その理由の多くは歴史的であるとあなたはおそらく正しいです。 JavaScriptには、コピーと貼り付けの長い歴史があります。
常にスタイルの問題ではありません。ウィンドウのロードイベントの後に、スクリプト要素をフラグメントに追加し、そのフラグメントをドキュメントに追加することで、ソーシャルメディアボタンを非同期でロードしようとしました。 Twitterのwidgets.jsはいくつかの場所で_location.href
_を使用しており、IE 8/9:への予期しない呼び出しがメソッドまたはプロパティへのアクセスを引き起こしています。 理由はわかりませんが、これは別のページからリンクを介してページにアクセスした場合にのみ発生します。スクリプト要素をヘッドに追加するか、または_window.location.href
_を使用した場合、これは発生しないため、IE 8/9およびcreateDocumentFragment()
を使用すると、奇妙なように見えます。
例:
_<a href="http://Twitter.com/share" class="Twitter-share-button" data-url="http://www.stackoverflow.com">Tweet</a>
<script>
(function (d, t) {
var head = document.getElementsByTagName('head')[0];
var frag = d.createDocumentFragment();
var s = d.createElement(t);
s.async = true;
s.src = 'http://platform.Twitter.com/widgets.js';
frag.appendChild(s);
head.appendChild(frag);
} (document, 'script'));
</script>
_
window
オブジェクトはデフォルトの作業名前空間であるため、location
はwindow.location
と等しくなります。
location
の使用は少し曖昧だと思います。明確にするためにwindow.location
を使用してください。
それは単なるスタイルの問題です。
概念的には、location
はwindow
やMath
とは異なり、Date
(ウィンドウはある位置にあります)のプロパティです。
locationはwindowオブジェクトのプロパティなので、window.locationをリクエストすることで取得できます。ただし、オブジェクトを指定しない場合、JavaScriptはウィンドウオブジェクトが必要であると想定します。したがって、場所を要求するだけでwindow.locationを要求するのと同じです。
それらは実際には同一です。技術的には、 "window
" オブジェクトIS Javascript変数のルートスコープと同じです。