7 月 6 日文の続きですが、実をいうとあの方法が使えないときもあります。HTML で書き出す部分がリンクオブジェクトであったり、イメージオブジェクトであればすんなりいけるものですが、なかには HTML を書き出さないのにああいったグローバルな値に保持させておきたいときもたまにあるものです。
スクリプト部分が大規模で複雑になったときや、いわゆる Menu クラス( それに付随する Item クラス )等ではそれが困難な場合があります。
では、そういったときどうすれば良いでしょうか? 要は格納するグローバルオブジェクトが一つ存在すれば良いわけですが、JavaScript には既存のグローバルオブジェクトはいくらでも存在します。window や frames , document , String ...。僕は一番しっくりするので document オブジェクトを使用しています。
function Hoge( id ){
this.id = id ;
document[ id ] = this ;
}
Hoge.prototype.call = function(){ alert( this.id ); };
ユーザーのなかには複数のサイトから、複数のコードをもらってきて1ページで使用している方もいるでしょう。そのためなるだけバッティングしないようにしたいものです。特に document オブジェクトは Netscape4.x のレイヤーオブジェクトを保持しているので(
document.layers[id]
と
document[id]
は等価 )、
function Hoge( id ){
this.id = id ;
document[ "$VIRGO_"+id ] = this ;
}
ここまでしとけばバッティングはまずないでしょう。宣伝にもなりますし(笑)
window オブジェクトを使用する場合、IE では
document.all[id]
と
window[id]
が等価であることと、window オブジェクトのプロパティに追加するとそれはグローバルな値になることに注意して下さい(6月18日分参照)。