DATE : 2006/08/01 (Tue)
JavaScript には、名前空間がありません。例えば、HTML の script 要素で読み込んだライブラリの中で 「func」という関数があった場合で自作のスクリプトの中でも func という関数を定義するとします。この場合、自分のスクリプトの中で func 関数を呼び出した場合でも、ライブラリの中で func 関数を呼び出した場合でも、自作スクリプト中の func 関数が呼び出されてしまいます。
この程度の場合は、ライブラリ中にある関数と同名のものを作らないように気をつければ良いだけの話となります。しかし、ライブラリを2つ以上読み込む場合はどうでしょうか。場合によっては、ライブラリ中の関数が後に読み込まれたライブラリの関数に上書きされて、ライブラリの動作がおかしくなる場合があります。
例えば、jQueryというライブラリがあります。このライブラリは、$関数を利用して DOM オブジェクトを簡単に取得できます。例えば、次のコードでページ中の全ての画像を非表示にできます。
$("img").hide();
$関数の引数には、CSS セレクタの表記や XPath を使用することもできます。
$(".target").hide(); // target クラスの要素を非表示にする
$("p:last").hide(); // 最後の p 要素を非表示にする
しかし、prototype.js というライブラリでも、$関数は利用されています。prototype.js では、引数に指定された ID を持つ DOM オブジェクトを返します。
そのため、prototype.js と jQuery を併用すると、問題が発生する場合があります。一応、対処法は「Prototype and jQuety」に書かれています。
しかし、これは prototype.js と jQuety のみをライブラリとして使用し、他のライブラリは使用しないという条件を基に書かれています。prototype.js に依存したライブラリや jQuery に依存したライブラリも追加した場合の保証はありません。
そのため、ライブラリを採用する際には、用意されている関数やオブジェクトが重複していないか注意を払わなければなりません。