2008/01/01

WSHの暗黙の最上位オブジェクトはscriptlet

a.hanai 公開モノ置き場 | scriptletオブジェクト
WSHにおける最上位オブジェクトとして「scriptlet」オブジェクトというモノが存在します。

HTMLの(中でJavaScriptを使う)場合、宣言なしにwindowオブジェクトが使えますが、JScriptの場合このwindowオブジェクトはありません。

JScriptの場合、WScriptが最上位のオブジェクトと説明するサイトもありますが、windowと同様の暗黙オブジェクトとされるなら、echoを書くたびにWScriptのSを小文字で誤タイプしてキレたりする必要はなくなりそうなもんですし、関数がWScriptのメンバになっても良さそうなもんです。

function main(){} WScript.echo(typeof WScript["main"]); // undefined

つまりこのコードでundefinedではなく、functionが返ってきて欲しいわけです。

で、実際に上記のサイトどおりscriptletを参照するとそのような動きになります。

<job> <script language="JScript"> function main(){} WScript.echo(typeof scriptlet["main"]); // function </script> </job>

ただし、これはwsfの場合でjsの場合、やっぱり使えません。

function main(){} WScript.echo(typeof WScript["main"]); // undefined WScript.echo(typeof scriptlet["main"]); // error('scriptlet'は宣言されていません)

ラッパークラスを作るような、ある程度の規模のコードならどっちにしろJScript単体では無理があるので、wsfの方を使えということでしょうか。ただ、複数ライブラリを読み込むようなある程度の規模のwsfファイルでグローバルな名前空間は逆にあんまり使いたくないですね。