jQuery のグローバルオブジェクトとオブジェクト書き換えの範囲
jQuery は JavaScript ライブラリの中で、グローバルオブジェクトとオブジェクト書き換えが少なく、他の JavaScript ライブラリとの親和性が高いと聞いたことがあります。そこで jQuery 1.1.2 のソースコードを読みながら、グローバルオブジェクトとオブジェクト書き換えの範囲を調べてみました。
jQuery というグローバルオブジェクトがあり、このオブジェクトは $ として参照できます。ただし $ というオブジェクトは、他の多くの JavaScript ライブラリも使っているため書き換える可能性があります。
jQuery はこの問題を 利用者の判断で回避できるような仕組み を提供しています。jQuery.noConflict() を使うと、$ が参照する jQuery 無効にして jQuery を取り込む直前の $ オブジェクトを回復します。
undefined (window.undefined) という undefined を表すグローバルオブジェクトがあります。jQuery の中での undefined とは、この undefined オブジェクトを使って判定しています。
jQuery.event を使ってイベントを操作すると、指定した element に $events というオブジェクトを追加します。この $events は追加したイベントハンドラを保持します。さらに element の onXxxx を jQuery.handle に書き換えて、イベントをフックします。なお、既存の onXxxx の値は $events の1つとして保持します。
XMLHttpRequest が存在しないとき、XMLHttpRequest を ActiveXObject("Microsoft.XMLHTTP") を生成する関数にします。
$ オブジェクトの書き換えは jQuery.noConflict() を使って回避し、直接 jQuery オブジェクトを参照すればよいですね。window.undefined は実害はないでしょう。element の $events オブジェクトの書き換えを回避することはできないので、element の onXxxx が書き換わるタイミングや順番を注意するというところでしょうか。
関連情報
- fixedUI プラグイン
- jTemplates
- Cycle Plugin
- Flash Plugin
- tablesorter
- Interface Elements
-
- Interface Elements の Carousel とフォートラベル API で旅行写真の 3D ギャラリーを作る
- Interface Elements の Imagebox とフォートラベル API で旅行写真のギャラリーを作る
- Interface Elements の Slider で郵便番号を入力してみたが・・・
- Interface Elements の Slider で旅行写真を拡大(または縮小)表示する
- Interface Elements の Tooltips をいろいろな要素で使ってみた
- Interface Elements の Scrollto でページ内リンクをスムースにする
- Interface Elements の Carousel と YouTube Data API で動画のサムネイルを回転表示する
- Selectors
- Events
- DOM Manipulation
- AJAX
- Forms with Functions
- Using with Other Libraries
- Books
- Resources