JScript 用 Include コンポーネント

2012-04-18 23:39:03 | Programming > JScript
はじめに
Include コンポーネントは JScript 上では関数化が困難とされる機能を提供する言語仕様拡張系のスクリプト コンポーネントである。通常のコンポーネントとは異なり、オブジェクトとして公開されることはなく、呼び出し元 JScript の変数に直接オブジェクトの関数を割り当てるという特殊な形態をとっている。


機能紹介
現在 Include コンポーネントに実装されている機能は以下の通り。

1) 他の JScript ファイルをインクルード
変数 $include に他の JScript ファイルをインクルードする関数を割り当てる。
詳細:JScript ファイルに一行加え、インクルードを実現する方法

2) 文字列内の変数展開
変数 $q に文字列内の変数展開を行う関数を割り当てる。
詳細:JScript で文字列内の変数を展開する関数を作ってみた

3) 関数の動的スコープ化
変数 $local にユーザー定義関数を動的スコープ化する関数を割り当てる。
詳細:JScript で関数を動的スコープ化する関数を作ってみた

各関数の詳細はリンク先を参照のこと。


ダウンロード
include.zip


インストール
通常スクリプト コンポーネントはシステムに登録して利用する。手順としてはエクスプローラ上で include.wsc を右クリックし、[登録] を実行する(または regsvr32.exe を使用してコマンドラインから登録)。登録後に include.wsc を移動するとコンポーネントが動作しなくなるので注意。その場合は移動先で再度 [登録] を実行すること。後述するが、構文によっては登録なしで呼び出すことも可能である。


構文
($=new ActiveXObject('JScript.Include'))(this);
上記は include.wsc をコンポーネントとしてシステムに登録した場合に利用できる構文である。一時的に変数$を利用するが、最終的に代入は行われない(後述)。システムへの事前登録を行わない場合は下記のように include.wsc のフルパスを指定して呼び出すことも可能(モニカによる参照)。
($=GetObject('script:C:\\...\\include.wsc'))(this);
いずれかの構文を用いてコンポーネントをアクティブ化することにより、Include コンポーネントに実装された機能を JScript の関数として呼び出すことができるようになる。この構文にはいくつかのオプションがあるが、それらは各機能の項で説明する。


構文の仕組み
構文はシンプルかつ一行で書けるよう工夫したもので、以下のような流れとなっている。
$ = new ActiveXObject('JScript.Include');
$.Initialize(this);
this['@Raptor'] = $;
delete $;
ActiveXObject オブジェクトのロード状態を保つため、オブジェクトの参照は必須である。スクリプト コンポーネント内から暗黙的に参照することはできないため(コンポーネント内の this は別物)、一旦 $ プロパティに格納する。その後、Initialize メソッドで @Raptor プロパティに入れなおし、$ プロパティを削除する。直接 this['@Raptor'] を使わず $ プロパティを経由しているのは構文をシンプルにしたかったため。また @Raptor といった添字アクセスしかできないプロパティを用いることで変数名の衝突を避けた。Initialize メソッドはデフォルトプロパティとして定義しているので省略可能。これらの組み合わせで構文は作られている。


スクリプト コンポーネントについて
スクリプト コンポーネントは XML フォーマットのテキスト ファイルであり、これ自体が COM コンポーネントとして動作する。実装には JScript や VBScript といったスクリプト言語が使われ、一言で言うなら「メモ帳で書ける COM コンポーネント」である。わずか数十行のコードなので是非読んでみてほしい。


おわりに
本コンポーネントが JScript プログラマの一助となれば幸いです。感想・不具合報告などお待ちしております。


JScript > Top (作成中……)

最新の画像もっと見る