Backbone は、コードの最初の 50 行ほどで自身を公開します。
コードの最後の 50 行程度の JQuery。
違いはなぜですか?
これは開発者がランダムに選択しているだけですか。または、ここに表示されていない目的があります。
Backbone = root.Backbone = {}; // line 33
window.jQuery = window.$ = jQuery; // near bottom..can someone post github link
Backbone は、コードの最初の 50 行ほどで自身を公開します。
コードの最後の 50 行程度の JQuery。
違いはなぜですか?
これは開発者がランダムに選択しているだけですか。または、ここに表示されていない目的があります。
Backbone = root.Backbone = {}; // line 33
window.jQuery = window.$ = jQuery; // near bottom..can someone post github link
バックボーンはオブジェクトのプロトタイピングを使用しているようで、後で機能/機能を適用します。
jQuery はクロージャーを作成し、後でグローバル スコープに公開するようです。これは、noConflict-Mode で「$」を公開せずに「jQuery」のみを公開する可能性があるためです。これは、JS がそのコールバックでいくつかのトリッキーな競合状態を持つ可能性があるため、すべてのアクションが定義される前に「準備完了」イベントが実行されすぎないようにするようにも見えます...
展開コンテキストに基づく開発者の選択。
バックボーン (および特にアンダースコア) は、サーバー側 (Node.js) またはブラウザーの外部で使用するためにオプションで使用できるように設計された、より汎用的な JavaScript ライブラリとして記述されています。したがって、それが動作するコンテキストはより可変的であり、そのコンテキストへのアタッチメントは、common.js や require.js などで使用する場合により柔軟になります。したがって、バックボーンは、一般的に名前空間がより定義およびカスタマイズされる環境 (開発者がより積極的に関与するリッチ ブラウザ アプリを含む) で使用されるため、ライブラリ自体の可用性よりも、周囲のコンテキストに早い段階で焦点が当てられます。それらの懸念において)。
jQuery は、Web ブラウザー内で使用することを目的として設計されています。したがって、コンテキストは固定されており、jQuery は名前空間内でライブラリを構築できます。次に jQuery の焦点は、特定の場所 ($
や などjQuery
) ですぐに利用できるようになり、使いやすくなることに変わります。一方で、しばしば汚染されたブラウザー環境内での競合を回避することができます。もともとは、より大規模な構造化された環境に適合するのではなく、混乱した状態で生命線を提供するものでした。 (より高いモジュール性を促進するのではなく、プラグインの守護者になる方法によって実証されているように).
良い質問。バックボーンは、サーバー側またはクライアント側で動作するように作成されました。jQuery は、グローバル ウィンドウ オブジェクトが存在しなければならない DOM 環境で動作するように作成されました。Node のようなサーバー側環境では、グローバル オブジェクトは と呼ばれglobal
ます。
あなたは近くにいましたが、これを設定するバックボーン ソースの実際の部分は、実際には最初の 2 行と最後の行です。
(function(){
var root = this;
...
}).call(this);
ほとんどのフレームワークと同様に、Backbone はそのセットアップをカプセル化する匿名関数から始まりますが、この場合、Web クライアントおよびノードのようなサーバー側this
で解決されるグローバル スコープのコンテキストでそのメソッドを呼び出します。window
global
jQuery はおそらく、このようなことをしないことに注意してください。jQuery は、document.getElementById
. ただし、jQuery をロードするためにサーバー側に仮想 DOM 環境を作成することは可能です。 JSDOMなどのプロジェクトを参照してください。
これは、私がこの正確なトピックを取り上げた講演のスライドです: https://speakerdeck.com/krunkosaurus/deep-dive-into-backbone-dot-js-internals-plus-underscore-dot-js